- 不正確な情報の可能性があります *
開発/テスト/ビルド用 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
にしましょう。