npmで–save-devは必要?–saveと違う?npm v5 以降はインストール時にデフォルトで –saveとなり、dependenciesに追加されるはずだけど?

上記のような疑問が出ました。

結論

--save-devと--saveの役割は違います。
npm installの時はちゃんと使い分けたほうがよさそう。

この問題を考える前提として、 devdependencies dependenciesの違いを理解する必要があります。

devdependencies dependenciesの違い

  • devdependenciesは開発者,dependenciesは利用者用の依存関係です。
  • 開発者と利用者でインストール内容が変わる。

開発者と利用者について、webpackを例に説明

webpackの依存関係をみると、開発者で67個の依存関係,利用者で23個の依存関係があります。

実際にwebpackの開発に携わる時には67個の依存関係をインストールします。

つまり、自分がそのモジュールの開発者なのか利用者なのかによってインストールしておくべきモジュールが異なります。webpackはよくnpm installして使いますが、この時は利用者として使っていることになります。

  • 開発者がインストールするのは、dependenciesとdevdependenciesに書かれているモジュール(全部インストールされる)。
  • 利用者がインストールするのは、dependenciesに書かれているモジュール。
    • 開発者と利用者のnpm installの方法は異なる。
    • 開発者の場合は、package.jsonがあるディレクトリでnpm installする。
    • 利用者の場合は、npm install パッケージ名とする。(例えばパッケージ名をtestとすると、npm insatall webpack) 
  • インストール方法
    • 利用者用のインストール

                    $npm install --save パッケージ名

  • 開発者用のインストール

                    $npm install --save-dev パッケージ名

  • 開発者でdependenciesだけインストールしたい場合

                    $npm install --production