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.json
にnpm scripts
を記載npx
コマンド
のいずれかのやり方を用いないとコマンドを実行することは出来ません。個人的にはnpm5.2.0以降であればnpx
コマンドを使わない理由はないように思います。
devDependencies
$npm i -D <package> $npm i -save-dev <package>
この場合、package.json
のdevDependencies
に記載されます。インストール先はカレントディレクトリにnode_modules
が作られその下になります。開発環境用の、テストや検証ツール等の本番環境で不要なパッケージはこちらに記載します。
dependencies
$npm i <package> $npm i -S <package> $npm i -save <package> $npm i -P <package>
この場合同じくカレントディレクトリのnode_modules
以下にインストールされますが、package.json
のdependencies
に記載されます。npmのデフォルトでdependenciesにインストールされるようになったので-S
や-P
を指定する必要はありません。こちらでは本番環境で必要なパッケージを記載します。
$npm install --production
でdependenciesのパッケージのみインストールされます。これによって本番環境で必要なパッケージだけをdependenciesに記載する運用が出来ます。npm install
しか使わないならあまり意識する事はないですが、覚えておくと幸せになれる事もあるのかなと思います。