しくじり日記

筋肉つけたい

npm installの違いを学ぶ

今まで雰囲気でnpm installしていた。npmでパッケージをインストールする時の--save-dev-gのオプションの違いをちゃんと調べてみた話。

グローバルインストール

$npm i -g <package>

グローバルインストールの場合自動的にパスが通るのでコマンドを実行出来ます。 インストール先は私のコンテナ環境の場合/usr/local/lib/node_modules/になり、カレントディレクトリより外にインストールされます。 今までコマンドが扱いやすく便利に思っていたのですが、package.jsonには記載されないため他の環境で同じパッケージの環境を扱う事は出来ず、出来るだけ避けた方が良いようです。

一応、グローバルインストールされたパッケージを確認するのは以下のコマンドです。

$npm ls -g

ローカルインストール

ローカルインストールされたパッケージはpackage.jsonに記載され、npm installで以下のdevDependenciesとdependenciesの両方のパッケージをインストール出来ます。

この時、グローバルインストールと違って

  • nodemodule/../..のパス付きで実行
  • package.jsonnpm scriptsを記載
  • npxコマンド

のいずれかのやり方を用いないとコマンドを実行することは出来ません。個人的にはnpm5.2.0以降であればnpxコマンドを使わない理由はないように思います。

devDependencies

$npm i -D <package>
$npm i -save-dev <package>

この場合、package.jsondevDependenciesに記載されます。インストール先はカレントディレクトリにnode_modulesが作られその下になります。開発環境用の、テストや検証ツール等の本番環境で不要なパッケージはこちらに記載します。

dependencies

$npm i  <package>
$npm i -S <package>
$npm i -save <package>
$npm i -P <package>

この場合同じくカレントディレクトリのnode_modules以下にインストールされますが、package.jsondependenciesに記載されます。npmのデフォルトでdependenciesにインストールされるようになったので-S-Pを指定する必要はありません。こちらでは本番環境で必要なパッケージを記載します。

$npm install --production

でdependenciesのパッケージのみインストールされます。これによって本番環境で必要なパッケージだけをdependenciesに記載する運用が出来ます。npm installしか使わないならあまり意識する事はないですが、覚えておくと幸せになれる事もあるのかなと思います。

参考