npm

npm install --save-devでパッケージがインストールできない

Node.jsに入門してハマった備忘録です。

環境

Windows10
npm 5.6.0
Node.js 8.9.4

事象:devDependenciesのパッケージがインストールされない

様々な初心者向けページの情報によると、package.json内のdevDependenciesの部分に列挙されるパッケージは、「npmプロジェクトで作成したアプリケーションを ライブラリとしてインストールする場合には一緒にインストールされない(依存関係を解決しない)」とある。

そのため、アプリケーション作成時においてはdependenciesdevDependenciesも変わらず、

npm install --save hogehoge

でも

npm install --save-dev hugahuga

でも、ライブラリhogehogeとhugahugaがインストールされる。

されるはずなのだが、自分の環境では後者のhugahua、つまり--save-devオプションを付けるとパッケージがインストールされない。一方でpackage.jsonは正しく更新されている。

package.json
  "dependencies": {
    "hogehoge": "^4.16.2"
  },
  "devDependencies": {
    "hugahuge": "^6.26.0"
  }

原因は環境変数 NODE_ENV

色々調べたところ、環境変数NODE_ENVproductionが設定されていることが原因だった。

>echo %NODE_ENV%
production

公式マニュアルによれば、

With the --production flag (or when the NODE_ENV environment variable is set to production), npm will not install modules listed in devDependencies.

とのこと。つまりNODE_ENV=productionが設定されているとnpm install時にdevDependenciesのパッケージはインストールされない。

この状態でdevDepenenciesのパッケージもインストールする場合は、

npm install --save-dev hugahuga --dev

というように、--devオプションを付ける。(正確には--devはオプションではなくnpmの設定)

https://docs.npmjs.com/misc/config

そもそもなんでNODE_ENV=productionになっているの?

これはよくわからなかった。

Atomエディタにatom-terminalというプラグインを入れていて、Alt+Shift+TでプロジェクトRootからターミナルを開くことができる。このコマンドで開いた時だけNODE_ENV=productionとなっていたのでAtomかプラグインの設定なんだろうけれど、突き止められなかった。