dependenciesとdevDependenciesの違い【package.json】

調べたことメモ。

  • dependencies
    →「アプリ本体で使うよー」なパッケージ
  • devDependencies
    →「開発のときだけ使うよー」なパッケージ

インストール方法

例えば、パッケージAをインストールする場合は、それぞれ以下のように書きます。

  • npm install A
    Adependenciesに追加する
  • npm install -D A
    AdevDependenciesに追加する

使い分け

この2つを使い分ける理由は、主に以下の2つらしい。

  1. 「開発のときだけ使うパッケージ」と「アプリ本体で使われているパッケージ」が一目で分かるから
  2. 本番環境で使わないパッケージをインストールしないため

 

1つはそのままです。

package.jsondevDependenciesを見るだけで「このアプリではテストにJestを使ってるのね!」みたいに一目で分かりますよね!って話です。

 

2つ目もそのままなのですが、

例えば

  • テストパッケージ(Jestなど)
  • バンドルパッケージ(Babel、Webpackなど)

などのパッケージは本番環境では使いません。

こんなときに、本番環境では使わないパッケージをdevDependenciesに書いておくと、無駄なインストールを省けます。

 

具体的に言うと、npm installを実行するときに以下のどちらかのように設定しておくと、devDependenciesに書かれたパッケージはインストールしないようにできます。

  • --productionというオプションを付ける
    • 要するにnpm install --production と書いて実行するだけ
  • 環境変数のNODE_ENVproductionを指定する
    • NODE_ENV=production npm installというように実行時に環境変数を一時的に設定する
    • もしくは事前に環境変数としてして設定しておく(Linuxのexportコマンドを使う)
    • CI/CIサービスで実行する場合は、yamlファイルに環境変数を設定できる
      参考環境変数 – GitHub Docs

 

ちなみに、npm ciコマンドを実行するときも同じように、上のように設定しておくことでdevDependenciesに書かれたパッケージはインストールしないようにできます。

npm ciは文字通り、CIのときに実行すると便利なインストールコマンドです)

 

あと、npmに自作パッケージを登録するときも気をつけないとダメっぽいです。

例えば、自作パッケージAをnpmに登録した場合、第三者がnpm install Aとしてインストールした際には、devDependenciesのパッケージはインストールされないみたいです。なのでnpmに登録するようなツールを作る場合は、devDependenciesはかなり重要っぽいです。

結論

・「個人開発でテキトーに作ったやつをテキトーにデプロイする」みたいな場合は、全部dependenciesに書いても特に問題ないけど

・色々気にするなら、上で書いたように使い分けたほうが良いっぽい

 

おわり

Node.js
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。
2019年くらいからフロントエンドエンジニアを目指している元アフィリエイターです💩

penpenをフォローする
penpenをフォローする
penpenメモ

コメント

タイトルとURLをコピーしました