1.問題
作成してから2年間アップデートしたことのないプロジェクト。
そのまま放置するのはお気の毒なので、パッケージをできるだけ最新のものに更新することにした。
一括更新する方法はないかな。
2.環境
npm packageを使用する環境すべて。
3.解決
npm outdated
、npm update
を順番に実行。
4.詳細
4.1 npm outdatedとは
registryをチェックし、インストールしたpackageが古くなってないか確認する。
current
は現在インストール済みのバージョン。
wanted
はpackage.jsonに記載されたsemver条件を満たす最新バージョン。
latest
はregistryで最新tagついているpackage バージョン。
4.2 npm updateとは
tagとsemverを尊重してすべてのpackageを最新バージョンに更新する。
4.3 例示
package.jsonでbabel-nodeとaxiosに使用するpackageの範囲をsemverで指定して、
npm outdatedすると、wantedにはそれを反映した結果が表示される。
ここでnpm updateすると、wantedのバージョンがインストールされる。
"dependencies": {
"@babel/cli": "^7.14.8",
"@babel/core": "^7.15.0",
"@babel/node": "^7.4.5", // minor versionを自動更新
"@babel/plugin-transform-runtime": "^7.15.0",
"@babel/preset-env": "7.4.5",
"aws-sdk": "^2.982.0",
"axios": ">0.21.2", // 0.21.2を超えたバージョンに更新
"bcrypt": "^5.0.1",
"body-parser": "1.19.0",
"dotenv": "^10.0.0",
"express": "4.17.1",
"express-session": "1.17.2",
"mongoose": "^5.5.15",
"multer": "^1.4.3",
"multer-s3": "^2.9.0",
"pug": "3.0.1",
"sass": "^1.38.2"
}
C:\Users\xxxx\xx\video-info-storage>npm outdated
Package Current Wanted Latest Location Depended by
@babel/node 7.4.5 7.22.19 7.22.19 node_modules/@babel/node video-info-storage
@babel/preset-env 7.4.5 7.4.5 7.23.8 node_modules/@babel/preset-env video-info-storage
axios 0.21.2 1.6.5 1.6.5 node_modules/axios video-info-storage
body-parser 1.19.0 1.19.0 1.20.2 node_modules/body-parser video-info-storage
dotenv 10.0.0 10.0.0 16.3.1 node_modules/dotenv video-info-storage
express 4.17.1 4.17.1 4.18.2 node_modules/express video-info-storage
express-session 1.17.2 1.17.2 1.17.3 node_modules/express-session video-info-storage
mongoose 5.13.22 5.13.22 8.1.0 node_modules/mongoose video-info-storage
multer 1.4.4 1.4.4 1.4.5-lts.1 node_modules/multer video-info-storage
multer-s3 2.10.0 2.10.0 3.0.1 node_modules/multer-s3 video-info-storage
nodemon 1.18.4 1.18.4 3.0.3 node_modules/nodemon video-info-storage
pug 3.0.1 3.0.1 3.0.2 node_modules/pug video-info-storage
sass-loader 12.6.0 12.6.0 14.0.0 node_modules/sass-loader video-info-storage
webpack-cli 4.10.0 4.10.0 5.1.4 node_modules/webpack-cli video-info-storage
5.関連知識
npm packageのバージョンアップデート範囲を指定したい(semver、^、~)
6.まとめ
npm packageを一括更新するにはnpm outdatedの後npm updateを実行。
package.jsonに指定したsemver範囲内で更新してくれる。
7.参考
npm package をアップデートしたい時の便利なコマンド
npm-outdated
npm-update
npm-checkを使ってnpm dependencyの管理
8.感じたこと
「一番最新のpackageならいつも正しい」とは思えない。
場合によってはlow versionのpackageの方がいいときがあるはず。
その判断基準が知りたいな。