Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
  • 不正確な情報の可能性があります *

開発/テスト/ビルド用 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 --productiondependencies のみインストールされる

  • だから、本番用バンドルをつくるさい、事前に npm install をおこなっていれば、すべて devDependencies に書く方式でも、最適なバンドルが作られる。

  • しかし、事前に npm install --production をおこなうのであれば、dependencies のみが node_modules にあるのだから、開発/テスト/ビルド用 npm パッケージ以外は dependencies に記載されていなければならない。

結論

あえてすべて devDependencies に書くこともないのだし、開発/テスト/ビルド用 npm パッケージは devDependencies, それ以外を dependencies にしましょう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment