npm packageを一括更新してみましょう（npm outdated、npm update）

# 1．問題
作成してから２年間アップデートしたことのないプロジェクト。
そのまま放置するのはお気の毒なので、パッケージをできるだけ最新のものに更新することにした。
一括更新する方法はないかな。

# 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のバージョンがインストールされる。

````package.json
  "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、^、~）](https://qiita.com/Mihamakun/items/68b33687842df392432d)

# 6．まとめ
npm packageを一括更新するにはnpm outdatedの後npm updateを実行。
package.jsonに指定したsemver範囲内で更新してくれる。

# 7．参考
[npm package をアップデートしたい時の便利なコマンド](https://qiita.com/ta1m1kam/items/2f2ac9d5197916a49132)
[npm-outdated](https://docs.npmjs.com/cli/v10/commands/npm-outdated)
[npm-update](https://docs.npmjs.com/cli/v10/commands/npm-update)
[npm-checkを使ってnpm dependencyの管理](https://blog.outsider.ne.kr/1228)

# 8．感じたこと
「一番最新のpackageならいつも正しい」とは思えない。
場合によってはlow versionのpackageの方がいいときがあるはず。
その判断基準が知りたいな。