NODE_ENV=productionにしてyarn install(npm install)するとdevDependenciesがインストールされない

Tags:

#JavaScript #Node.js
このエントリーをはてなブックマークに追加

この仕様を忘れていて、幾度となく時間を浪費してきたので備忘録としてブログにしておきます。

NODE_ENV=productionにしてyarn install(npm install)するとdevDependenciesがインストールされません。

NDDE_ENVを利用してAPIのリクエスト先を変えたり、DBのアクセス先を変えたりすることは多いと思います。 例えば、NODE_ENV=testの時はtest環境のAPIにアクセスし、NODE_ENV=productionの時はproductionのAPIにアクセスするというような設定です。

参考: Next.jsでNODE_ENVによってAPIリクエスト先を変える

このような設定の場合は開発時はうまく行きますが、production環境へデプロイしたときに上記の仕様を忘れているとはまってしまいます。

NODE_ENV=productionの時でもdevDependenciesをインストールしたい

仕様を思い出して、production環境へのデプロイ時も依存ライブラリのインストール時だけ一時的にNODE_ENV=testにするということを思いつくかもしれません。

export NODE_ENV=test && yarn install

しかしならが、DockerfileやCIの設定ファイルでこのような記述が突如でてきたとしても、なぜ一時的にNODE_ENVをtestにしているのか、ぱっと見ただけではわからず読み手を困惑させてしまいます。

そんな時にはyarn installやnpm installコマンドの以下のオプションを利用すると良さそうです。

# NDOE_ENV=productionの時でもdevDependenciesをインストールしてくれる
yarn install --production=false
npm install --production=false

yarn install, npm installのどちらにも–production=falseのオプションが用意されており、このオプションを利用するとNODE_ENVの値がproductionの時でもdevDependenciesをインストールしてくれます。

そもそもdevDependenciesとは

–production=falseのオプションを利用するとdevDependenciesもインストールしてくれますが、 そもそもdevDependenciesとは開発時に必要な依存ライブラリを指しています。 例えば、Jestなどのテスト関係のツールやESLintなどLinter系のライブラリはdevDependenciesに含まれるべきです。 NODE_ENV=productionの時でもdevDependenciesのライブラリをインストールしたいとおもう時には、もしかするとdependenciesに含むべき依存ライブラリをdevDependenciesに書いてしまっている可能性もあります。 –production=falseのオプションを使って問題を回避するのではなく、一度立ち止まってdependencies, devDependenciesの依存関係を見直した方が良いかもしれません。

まとめ

上記二つのポイントを覚えておくと役に立つ時がくるかもしれません。以上です。

See Also