【npm】 本番環境で使わないパッケージを切り分ける
本番環境では使わないけれど開発時やテスト等に使うものは、dependencies
ではなくdevDependencies
に入るようにします。
開発時用のパッケージの入れ方
--save-dev
または-D
を付け加えます。
npm i --save-dev jest # または npm i -D jest
これでdevDependencies
にパッケージが登録されます。
{ "name": "uuid", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "devDependencies": { "jest": "^27.5.1" } }
devDependencies以外のパッケージを一括で入れる
普通にnpm i
すると、devDependenciesを含む全パッケージが導入されます。
本番環境などでdevDependenciesが不要な場合、--production
を付けることで、devDependencies
にあるパッケージを無視するようになります。
# package.jsonのうち, dpendenciesにあるもののみ導入 npm i --production # package-lock.jsonのうち, dpendenciesにあるもののみ導入 npm ci --production
で導入できます。
また、自分でdevDependencies
に入れたものだけでなく、dependencies
で利用しているパッケージが依存するパッケージにも適用されます。そのため、自分でdevDependencies
に入れたものが無くとも、ファイルサイズの低減になります。
そのため、devDependencies
が0件でも、本番環境などでは--production
を付けるべきです。
使い分け
開発環境でしか使わないパッケージはdevDependencies
に入れると良いです。例えば、jestのようなテスト用のパッケージ、@types
で始まる、開発時に型を認識させるためのパッケージなどです。
他にも、ビルド後は不要になるようなパッケージなど、本番環境では不要となるものをdevDependencies
に入れましょう。
まとめ
開発環境でしか使わないようなものはdevDependencies
に入れておくと、本番環境で余分なものを読み込むことなく運用することができます。
また, 自分からdevDependencies
に導入したもの以外にも、パッケージの依存パッケージにdevDependencies
が存在するものもあるため、--production
の有効性は大きいです。
本番環境で必要なものとそうでないものはしっかり区別して運用しましょう!
