npm audit fixで修正できないエラーを手動で解決する方法

プログラミング

Node.jsのパッケージ管理ツール「npm」では、バージョン6からセキュリティが強化され、

脆弱性があるパッケージをインストールする場合は警告が出るようになりました。

npm audit fixコマンドにて自動で修正できる場合もあるのですが、

それだけでは修正できず手動での修正が必要な場合があります。

  • npm audit fixを打ってもエラーを解決できない
  • npm auditで出たエラーを手動で修正したい

上記のような悩みをお持ちの方に、

npm audit fixで修正できないエラーを手動で解決する手順を紹介します。

修正手順を先に紹介
  1. package-lock.jsonを修正
  2. node_modules/ を削除
  3. npm installを再実行
スポンサーリンク

エラー内容の確認 – npm installが失敗する

npm installを実行すると脆弱性に関する以下のようなエラーが出ます。

$ npm install
found 5 vulnerabilities (1 low, 3 moderate, 1 high)
  run `npm audit fix` to fix them, or `npm audit` for details

npm audit fixでは直らず、手動で直してくださいとの表示が出ます。

$ npm audit fix

fixed 0 of 5 vulnerabilities in 827 scanned packages
  5 vulnerabilities required manual review and could not be updated

どうやって手動で直すかは特に明言されていません。

npm audit fixで修正できないエラーを手動で解決する方法

まずはnpm auditで脆弱性の内容を確認します。(以下一部抜粋)

$ npm audit

┌──────────────────────────────────────────────────────────────────────────────┐
│                                Manual Review                                 │
│            Some vulnerabilities require your attention to resolve            │
│                                                                              │
│         Visit https://go.npm.me/audit-guide for additional guidance          │
└──────────────────────────────────────────────────────────────────────────────┘

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Arbitrary Code Execution                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ underscore                                                   │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=1.12.1                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ jsonlint [dev]                                               │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ jsonlint > nomnom > underscore                               │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/1674                            │
└───────────────┴──────────────────────────────────────────────────────────────┘

jsonlint → nomnom → underscore が脆弱性の原因となっているようです。

Patched in │ >=1.12.1」とあるので、1.12.1以上を指定する必要があります。

手動修正は以下の手順を実行します。

修正手順
  1. package-lock.jsonを修正
  2. node_modules配下を削除
  3. npm installを再実行

package-lock.jsonを修正

package-lock.jsonのファイルにて、脆弱性を含むパッケージ(今回の例だとunderscore)を

requiresで指定している部分にて、該当パッケージ以外の記述すべて削除し、

該当パッケージのバージョンに脆弱性がないものを指定します。

編集前

"nomnom": {
  "version": "1.8.1",
  "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
  "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
  "dev": true,
  // この部分を修正する
  "requires": {
    "chalk": "~0.4.0",
    "underscore": "~1.6.0"
  },

編集後

"nomnom": {
  "version": "1.8.1",
  "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
  "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
  "dev": true,
  // この部分を修正する
  "requires": {
    // requires内の脆弱性があるパッケージ以外を全て消す(例としてunderscore以外を消す)
    // 脆弱性があるパッケージのバージョンを、脆弱性を含まないバージョンに変更する
    // 今回の例では1.12.1以上を指定
    "underscore": "^1.12.1"
  },

エディタの検索機能などで脆弱性があるパッケージ名で検索をかけて、それが含まれているrequires内を編集します。

node_modules配下を削除

以下のコマンドでnode_modules配下を削除します。

$ rm -rf node_modules/

npm installを再実行

npm installを再実行します。問題なく処理が完了すればOKです。

$ npm install

最後にエラーがないかの確認を実施

再度「npm audit」を実行して、脆弱性がなくなっていればOKです。

$ npm audit

                       === npm audit security report ===

found 0 vulnerabilities
 in 824 scanned packages
いっちー
いっちー

npm audit fix」でも脆弱性の問題が修正できない場合は、今回紹介した方法を試してみると良いでしょう!

出典

おすすめ書籍

コメント

タイトルとURLをコピーしました