Help us understand the problem. What is going on with this article?

【いまさらですが】package.jsonのdependenciesとdevDependencies

More than 1 year has passed since last update.

package.jsonのdependenciesとdevDependenciesの使い分けについて、いまさらですがまとめます。

dependenciesとdevDependenciesの違い

例えば、sampleという名前のパッケージを開発しているとします。
dependenciesにはrequest、devDependenciesにはmochaが書かれているとします。

package.json
{ 
  "name": "sample",
  "dependencies": {
    "request": "^2.81.0"
  },
  "devDependencies": {
    "mocha": "^3.4.2"
  }
} 

//このほかの要素は省略します 

開発者がpackage.jsonがあるディレクトリでnpm installを行うと、dependenciesに書かれているパッケージもdevDependenciesに書かれているパッケージもすべてnode_modules内にインストールされます。
つまり、requestもmochaもどちらもインストールされます。

ですが、こちらをパッケージとして公開し、開発者以外の人がnpm install sampleとしたときには、dependenciesに書かれているパッケージがnode_modules内にインストールされ、devDependenciesに書かれているパッケージはインストールされません。
つまり、requestのみがインストールされます。

devDependenciesには、開発に必要なパッケージのみを書きます。
ですので、パッケージを使いたい人がnpm install パッケージ名としたときにはdependenciesに書かれているパッケージのみがインストールされます。
一方で、開発者がこのpackage.jsonがあるディレクトリでnpm installを行うと、dependenciesに書かれているパッケージのみではなく、devDependenciesに書かれているパッケージもインストールされます。

package.jsonへの追加方法

dependenciesに追加したいとき

$npm install --save request

--saveオプションを付けて、パッケージをインストールします。

devDependenciesに追加したいとき

$npm install --save-dev mocha

--save-devオプションを付けて、パッケージをインストールします。

package.jsonに書かれているパッケージをインストールする

package.jsonに書かれているすべてのパッケージをインストールする

$npm install

上で書いたように、package.jsonがあるディレクトリでnpm installすると、dependenciesに書かれているパッケージもdevDependenciesに書かれているパッケージもインストールされます。

package.jsonのdependenciesに書かれているパッケージのみインストールする

$npm install --production

開発者として、package.jsonがあるディレクトリでnpm installするときも、dependenciesに書かれているパッケージのみをインストールすることができます。
--productionオプションをつけることで、dependenciesに書かれているパッケージのみインストールされます。

chihiro
jrits
信頼と魅力のある先進のITをもとに、お客様のワークスタイル・イノベーションの実現を目指します。
http://www.jrits.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away