開発
nvmとdirenvでプロジェクトのNode.jsのバージョンを指定する
Masato Yamamoto
先日,あるプロジェクトでNode.jsのバージョンを固定したいという話があり,どうやってやるのがいいのか少し調べてみました.
package.jsonのenginesを指定
package.jsonのenginesにNode.jsのバージョンを指定することができます.
ここに書いてある感じで,
{ "engines" : { "node" : ">=0.10.3 <0.12" } }
指定できるらしい.これでいいですねって思っていましたが,どうやら engine-strict フラグを有効にしないと,強制できなくてただバージョンを package.jsonに書いてあるだけになってしまう. なので, engine-strict フラグを有効にしようとしたが,npm 3.0.0からこのフラグは非推奨.なので,別の方法を探すことに.
direnv + nvm
nvmはNode.jsのバージョン管理のソフトウェアで良く知られていると思います.一方,direnvはまだそれ程知名度はありませんが,開発時に非常に便利なソフトウェアです.簡単にdirenvを説明すると,ディレクトリ毎に環境変数などを有効にできるソフトウェアです.あるディレクトリに, .envrcというファイルを置いておけば,そのディレクトリに移動すると勝手に環境変数が読み込まれるようになります.
direnvのWikiを見てもらうと分かりますが,環境変数以外に,こういう風 に言語毎の設定もできます.
なのでこれを利用することにしました.
nvmは直下のディレクトリに, .nvmrc があるとそれを見に行ってそのバージョンを利用してくれます.direnvで use node を記述しておくとdirenvも.nvmrcを見てそのバージョンを利用するようにしてくれます.
.envrcはこんな感じ.
set -e
use node
.nvmrcはこんな感じ.
6.2.1
これで,v6.2.1がこのプロジェクトで利用されるようになります.
このバージョンがインストールされていない時はエラーが出ますが,.nvmrcを置いているので, nvm install && nvm use すれば大丈夫です.
感想
この方法でもできているのですが,direnvをインストールしてない人はしなければならないというのが….もっと良い方法を知っていれば,是非教えていただけると嬉しいです.