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