【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の有効性は大きいです。

本番環境で必要なものとそうでないものはしっかり区別して運用しましょう!

devdependencies thumb

役に立ったらシェアしよう!