npmの--save, --save-dev, --save-optionalの違い

http://hblog.glamenv-septzen.info/entry/2015/03/22/233241
より引用

1. --save は package.json の dependencies に追記される。

他の人が npm install した時に、dependencies に指定したパッケージが全てインストールされる。

2. --save-dev は package.json の devDependencies に追記される。

開発者のみが使うため、利用者が npm install パッケージ名 するときはこの依存パッケージはインストールされない。
もし devDependencies もインストールしたい場合は、--dev 設定を有効化(これはnpm installのオプションではなく、 npm help 7 config にあるようにnpmの設定である)して、npm install パッケージ名 --dev とする。
ただし、利用者がpackage.json含めたソースコード全体をgitなどからcloneして開発する = 開発者と同等の立場として、追加パラメータ無しで package.json のあるディレクトリで npm install とだけした場合は、開発者の立場になるわけなので、devDependencies もインストールされる。というか、依存関係は全てインストールされるらしい。
dependencies と devDependencies の使い分けだが、パッケージやプロジェクトが実行時に必要となるのを dependencies に設定し、ビルド時だけしか使われないようなビルドツール・ライブラリなどは devDependencies に入れておくと良さそう。

3. --save-optional は package.json の optionalDependencies に追記される。

optionalDependenciies に追記したものは、通常のnpm installでインストールされるが、インストールに失敗してもスルーされる。正直、使いドコロがよくわからない。