npm install の概要
npm install を実行すると、 package.json に記載したパッケージと、
そのパッケージを使用するために必要な関連モジュールをまとめてインストールしてくれる。
なお、この際にpackage-lock.jsonが自動作成され、
実際にインストールされたモジュールのバージョン等が記載される。
package-lock.jsonが存在している状態で再度 npm install を実行した場合、package.json ではなく package-lock.jsonを元にインストールが実行される。
package-lock.jsonの存在意義としては、チームで開発する場合などに関連モジュールのバージョンまで揃えられる、という点が主かと思われる。
そのあたり下記記事様がわかりやすく解説してくださってます。
パッケージのセキュリティに問題がある場合
上記 npm install でインストールしたパッケージやモジュールのセキュリティに問題がある場合、
以下のようにnpm audit fix
で解決するかnpm audit
で詳細を確認するよう勧めてくれる。
found 1 high severity vulnerability
run `npm audit fix` to fix them, or `npm audit` for details
audit fixを行った場合、package.jsonに書かれている範囲内で
脆弱性をクリアにするために必要な関連パッケージやモジュールのアップデート等を行ってくれるらしい。
(アップデートされた内容はpackage-lock.jsonに書き込まれる。)
audit fixを行っても脆弱性が残っている場合、
npm update
やnpm dedupe
で解決できる可能性がある。
そのあたり含めて下記記事様がかなり詳しくまとめてくださってます。
audit fixやupdateやdedupeを行ってもまだ脆弱性が残っている場合は
package.jsonやpackage-lock.jsonに書かれている内容を修正する必要がある。
この際、手動でpackage.jsonを更新する方法と
コマンドで一括変更する方法がある。
手動での更新方法については下記記事様がわかりやすく解説してくださってます。
ちなみに、例えばglob-parentというモジュールに脆弱性があることがわかった場合
npm ls glob-parent
上記コマンドを実行すると、下記画像のような形で依存関係を確認することができる。
npm-check-updates で一括アップデート
npm-check-updatesというライブラリを使用すると
package.jsonを一括で最新のものにアップデートできる。
下記記事様がわかりやすくまとめてくださってます。
メジャーバージョンを固定して、マイナーバージョンのみ更新することもできるとのこと。
下記記事様がわかりやすくまとめてくださってます。
※全てのパッケージを一気に最新までアップデートするとコード書き換えの必要が大量に発生してしまうかもしれないので注意。
ちなみに、
上記記事中のncuコマンドを実行した際に
Hmmmmm... this is taking a long time. Your console is telling me to wait forinput
on stdin, but maybe that is not what you want.
Try specifying a package file explicitly with --packageFile package.json.
このようなエラーが出た場合は、エラーメッセージにも書かれてますが
ncu --packageFile package.json
上記のようにpackage.jsonを明示的に指定するとうまくいくようです。
audit fix --force で一括アップデート
npm audit fix
は、上述した通りpackage.jsonに書かれている範囲内でモジュールのアップデート等を行ってくれるが、npm audit fix --force
コマンドを実行すると、脆弱性をクリアにする形でpackage.jsonの書き換えが行われる。
ただし、場合によっては意図しないパッケージのバージョンダウンなどが発生してしまうこともあるようなので、どのような書き換えがなされたのかをpackage.jsonを確認して実行するなどの注意が必要。