2
Help us understand the problem. What are the problem?

posted at

updated at

【まとめ】npm install と npm audit とnpm-check-updates

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 updatenpm dedupeで解決できる可能性がある。
そのあたり含めて下記記事様がかなり詳しくまとめてくださってます。

audit fixやupdateやdedupeを行ってもまだ脆弱性が残っている場合は
package.jsonやpackage-lock.jsonに書かれている内容を修正する必要がある。

この際、手動でpackage.jsonを更新する方法と
コマンドで一括変更する方法がある。

手動での更新方法については下記記事様がわかりやすく解説してくださってます。

ちなみに、例えばglob-parentというモジュールに脆弱性があることがわかった場合

npm ls glob-parent

上記コマンドを実行すると、下記画像のような形で依存関係を確認することができる。
スクリーンショット 2022-06-03 120841.png

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を確認して実行するなどの注意が必要。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
2
Help us understand the problem. What are the problem?