JavaScript勉強会

JavaScriptの学習日記

Node.jsのバージョンによる違い

JavaScriptの練習で、Node.jsを使っています。

Node.jsは、バージョンによって使える機能が違います。

Node.jsのバージョンの違い~Node.jsの歴史についてメモ。(備忘録)

 

 

Node.jsのバージョン一覧

Node.jsの公式サイトで、バージョンの一覧が公開されていました。

リリース一覧 | Node.js

 

「Node.js 6.x」、「Node.js 0.12.x」などがありますね。

 

バージョンによる違い

Node.jsには、バージョン6.xの他に、バージョン0.12.xというシリーズもあります。

この「0.12.x」の系統は、何なのでしょうか???

 

(参考)node.js のバージョンについて。

https://teratail.com/questions/69714

Node.jsは0.xの時代に開発が停滞していたことがあって、一部の開発者が「io.js」と称してフォークを行い、バージョン1から3まで進んでいました。

その後、Node.jsとio.jsが再統合されることとなったのですが、io.jsでバージョン番号が進んでいてしまって、そちらと同じ番号を使っても混乱するので、統合後のNode.jsは4.0を名乗ることとなりました。

 

ということで、Node.jsとして見た時のバージョン番号は飛んでいますが、開発はio.jsとして連続して行われているので、「質的に何かが変わった」ということはありません。

なお、Node.jsの公式サイトによれば、バージョン6.10が「推奨」となっています。

最新版を追いかけるとバグを踏みやすいですし、最先端の機能を使わないならそれぐらいの安定版がいいかなと思います。

 

Node.jsは、途中で「io.js」にフォーク(派生)して、また合流した歴史があるんですね!

 

  • 旧Node.js時代: バージョン 0.x ~
  • io.js時代:   バージョン 1.x ~ 3.x
  • 新Node.js時代: バージョン 4.x ~

 

html5experts.jp

 

Node.js v4とNode.js v0.12の違い

Node.js v4はio.js v3が元になっています。

つまり、io.js v1からv3までにはいった機能が、そのままNode.js v4では利用可能です。

 

Node.js v4のNode.js v0.12は互換性はあるのか

JavaScriptのレイヤは互換性があります。

ほとんどのモジュールはそのまま動くでしょう。

ただし、CやC++のnative module をバインディングして作っているライブラリはV8がバージョンアップされたことにより、内部のABIの互換が崩れているため動かなくなります。

 

  • io.jsの変更を取り込んで発展させているのが、Node.js v4.x ~
  • io.jsの変更とは関係なく、当初のNode.jsを発展させているのが、Node.js v0.12.x ~

ということみたいです。

 

安定版(LTS)

Node.jsのバージョン番号は、奇数が開発版で、偶数が安定版になってるようです。

  • LTS = Long Term Support = 長期サポート
  • 奇数:開発版は新機能を盛り込むチャレンジングなバージョン。人柱向け
  • 偶数:安定版は安全な枯れたバージョン → LTS。実務向け

 

github.com

 

↑このページの表で「LTS Status」という項目を見ます。

4.x Maintenance

5.x No LTS

6.x Active

7.x No LTS

Node.jsの奇数バージョンは「No LTS」となっていて、長期サポートはありません。

 

harmonyモード(ハーモニーオプション)

Node.js v0.12.xを使う場合、注意点があります。

v0.12.xでは、ES2015の新しい機能を使いたい場合、「--harmony」というオプションを有効にしてNode.jsを実行する必要がありました。

 

(参考)

node.jsのharmonyモード - 株式会社BEFOOL

nodeコマンドに--harmonyというオプションがあります。

--harmonyオプションをつけることで、ECMAScript6機能の一部が使えるようになります。

 

ECMAScript 2015 (ES6) とそれ以降のバージョン | Node.js

すべての ECMAScript 2015 (ES6) の機能は shipping(リリース済み)、staged(ステージング) と in progress(開発中)の3つに分けられています:

 

Node.js の --harmony フラグの現在の動作は staged(ステージング) 機能のみを有効にすることです。

 

Node.jsのv0.12の時に harmony はdefaultにならないという結論になりました。 - from scratch

結論から言えば、v0.12からharmonyオプションがデフォルトになるという事は決められていません。

 

Node.js v4.0.0 がリリースされました。 - from scratch

ここでは io.js v3.x から Node.js v4.0.0 までに入った機能について解説します。

ES6

Arrow 関数がデフォルトで利用可能になる

Arrow関数が追加されました。これまでは--harmony-arrow-functions と付ける必要がありましたが、これからは不要です。

 

Node.jsでES2015の機能を有効にする方法が、バージョンによって違うようです。

  • v0.12.x ~: --harmonyフラグを付けると、新機能が使える。 
  • v4.x ~  : --harmonyフラグを付けなくても、新機能が使える。

 

新しいNode.jsでは、デフォルト(初期設定)で、harmonyが有効になっている状態なので、特に何も指定しなくても、ES2015の機能が使えるようです。

 

「--harmony」について、呼び方がいろいろあるようでした。

  • harmonyオプション
  • harmonyフラグ
  • narmonyモード

 

個人的には「モード」という呼び方が、状態を選んでいるかんじがして良いと思いました。

 

Node.jsのバージョン変更

ES2015の新機能「アロー関数」を練習するため、WindowsにインストールしていたNode.js v.0.12.0をv.6.11.2にバージョンアップしてみました。

 

バージョンの管理、変更は「nvm」を使ってやりました。

jsstudy.hatenablog.com

 

バージョン変更の手順をメモ。

 

(1) コマンドプロンプト(黒い画面)を起動します。

 

(2) インストール可能なversionの一覧を表示します。

nvm list available

とコマンドを入力します。

 

f:id:jsstudy:20170819143156p:plain

 

最新の安定版(LTS)は、Node.js v6.11.2でした。

 

(3) 指定したversionをインストールします。

Windows用のNode.jsには、「64ビット版」と「32ビット版」の2種類があります。

今使っているパソコンはWindows7 32ビット版なので、インストールするNode.js v6.11.2も「32ビット版」のほうを指定します。

(32ビット版のWindows7上では、64ビット版向けのソフトは動きません。)

 

nvm install 6.11.2 32

とコマンドを入力します。

末尾の「32」を省略すると、自動的に64ビット版が選択されてしまします。(注意!)

 

(4) 指定したversionを使用します。

今、Windowsには、

  1. 以前インストールした古いNode.js v0.12.0 (32ビット版)
  2. 今インストールした新しいNode.js v6.11.2 (32ビット版)

の2つがあります。

使用するNode.jsを、v0.12.0からv6.11.2に切り替えます。

 

nvm use 6.11.2 32

とコマンドを入力します。

末尾の「32」を省略すると、64ビット版のNode.js v6.11.2はインストールされてないよ!(=選べない)というエラーメッセージが出てしまいます。

 

(5) Node.jsのバージョンを確認します。

node -v

とコマンドを入力します。

現在動いているNode.jsのバージョンが「6.11.2」と表示されたらOKです。

 

f:id:jsstudy:20170819144748p:plain

 

まとめ

Node.jsは、バージョンによって

  • 使える機能の違い
  • オプションの指定方法の違い

があるようなので、注意が必要ですね?

 

Node.jsをv6.11.2に上げたら、--harmonyオプションの指定なしでも、Visual Studio Code上でJavaScriptのアロー関数(=>)が動いたので良かったです!

 

 

Node.js超入門

Node.js超入門