JavaScript
npm
package.json

【いまさらですが】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に書かれているパッケージもインストールされます。


packege.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に書かれているパッケージのみインストールされます。