GitHubに脆弱性警告が通知されていた。pug-code-gen を 2.0.2 → 2.0.3、pug を 2.0.2 → 3.0.1 にアップデートせよとのお達しである。
pug を 2.0.2 → 3.0.1 にアップデートすれば pug-code-gen も 3.0.x にアップデートされるようなので、pug だけアップデートすればよさそうなのだが、この2つのモジュールを使っている pug-cli がアップデートされていない*1。 こういうときは npm audit fix を使って package-lock.json を直すが定番だが、さすがにメジャーバージョンのアップデートは対応できない。
以前、npm モジュールのセキュリティアップデート - koba::blog のやり方で修復したことがあるのだが、これはどうやらたまたまうまくいっただけのようである。 そこでネットを調べると package.json の resolutions を使って依存パッケージのバージョンを指定する - 30歳からのプログラミング というページを発見したので、これを参考にバージョンアップを試みた。
packegae-lock.json は使用するモジュールのバージョンを1つ1つ全て指定するファイルだが、rpm i が自動生成するため、人間が修正するには向いていない。けれど npm-force-resolutions というモジュールを使用することでバージョンを指定した修正が可能になるようである。
まず、package.json に以下のセクションを追加する。*2
@@ -5,6 +5,7 @@
"main": "src/js/majiang.js",
"private": true,
"scripts": {
+ "preinstall": "npx npm-force-resolutions",
"build:html": "pug -o www -P src/html/page/",
"build:js": "webpack --mode development --devtool inline-source-map",
"build:css": "stylus src/css/index.styl -o www/css/majiang-1.5.0.css",
@@ -32,6 +33,9 @@
"webpack": "^4.40.2",
"webpack-cli": "^3.3.9"
},
+ "resolutions": {
+ "pug": "^3.0.1"
+ },
"dependencies": {
"jquery": "^3.5.1",
"jquery-ui": "^1.12.1"
続いて npm i を実行する。
$ npm i
これで ./node_modules/ と package-lock.json が更新される。ただしこの段階では npm ls で確認した時にエラーが表示される。 npm-force-resolutions の README に「package-lock.json が更新されたのち再度実行せよ」とあるので、今度は npm ci を実行する。
$ npm ci
これで npm ls の際のエラーも表示されなくなる。一時的に修正した package.json を元に戻せばOK。
$ git checkout package.json