Node.jsに入門してハマった備忘録です。
環境
Windows10
npm 5.6.0
Node.js 8.9.4
事象:devDependenciesのパッケージがインストールされない
様々な初心者向けページの情報によると、package.json内のdevDependenciesの部分に列挙されるパッケージは、**「npmプロジェクトで作成したアプリケーションを ライブラリとしてインストールする場合には一緒にインストールされない(依存関係を解決しない)」**とある。
そのため、アプリケーション作成時においてはdependenciesもdevDependenciesも変わらず、
npm install --save hogehoge
でも
npm install --save-dev hugahuga
でも、ライブラリhogehogeとhugahugaがインストールされる。
されるはずなのだが、自分の環境では後者のhugahua、つまり**--save-devオプションを付けるとパッケージがインストールされない。**一方でpackage.jsonは正しく更新されている。
"dependencies": {
"hogehoge": "^4.16.2"
},
"devDependencies": {
"hugahuge": "^6.26.0"
}
原因は環境変数 NODE_ENV
色々調べたところ、環境変数NODE_ENVにproductionが設定されていることが原因だった。
>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の設定)
そもそもなんでNODE_ENV=productionになっているの?
これはよくわからなかった。
Atomエディタに**atom-terminal**というプラグインを入れていて、Alt+Shift+TでプロジェクトRootからターミナルを開くことができる。このコマンドで開いた時だけNODE_ENV=productionとなっていたのでAtomかプラグインの設定なんだろうけれど、突き止められなかった。