package.jsonのdependenciesとdevDependenciesの使い分けについて、いまさらですがまとめます。
dependenciesとdevDependenciesの違い
例えば、sampleという名前のパッケージを開発しているとします。
dependenciesにはrequest、devDependenciesにはmochaが書かれているとします。
{
"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に書かれているパッケージのみインストールされます。