- 不正確な情報の可能性があります *
開発/テスト/ビルド用 npm パッケージは devDependencies、 それ以外を dependencies にしましょう。前者は npm i -D foo 後者は npm i -S foo です。
- CRA あるいはその eject プロジェクトを想定しています。ただし、未検証だが CRA は関係なさそう。
- webpack v4 系を想定。
公式ドキュメントから該当資料を網羅的に探し出したのではなく、CRA の挙動と公式ドキュメントから以下を調べました。
-
npm run buildで、dependenciesのライブラリであれdevDependenciesのライブラリであれ、生成されるバンドルに含まれる。ただし、コードで一度も使われていない場合はバンドルから自動で省かれる。それから、node_modules にコードがなければ、ビルドエラーになる。 -
プロジェクトのディレクトリでの
npm installではdependenciesの npm パッケージも、devDependenciesの npm パッケージも両方インストールされる。 -
プロジェクトのディレクトリでの
npm installでは「dependencies の npm パッケージの package.json の devDependencies の npm パッケージ」はインストールされない。devDependencies も同様。 -
プロジェクトのディレクトリでの
npm installではdevDependenciesの npm パッケージをインストールしない方法は、npm install --productionというように、オプションをつけて実行する。 -
npm install --productionはdependenciesのみインストールされる -
だから、本番用バンドルをつくるさい、事前に
npm installをおこなっていれば、すべてdevDependenciesに書く方式でも、最適なバンドルが作られる。 -
しかし、事前に
npm install --productionをおこなうのであれば、dependenciesのみが node_modules にあるのだから、開発/テスト/ビルド用 npm パッケージ以外はdependenciesに記載されていなければならない。
あえてすべて devDependencies に書くこともないのだし、開発/テスト/ビルド用 npm パッケージは devDependencies, それ以外を dependencies にしましょう。