動かざることバグの如し

近づきたいよ 君の理想に

Node.jsとnpmのバージョンでハマった話

環境

  • Nodejs v18

やりたいこと

nodenvで管理しているNode.jsの各バージョンに対して、適切な最新版のnpmをグローバルインストールしたい。

npmをグローバルにアップデートしようとしたら、こんなエラーが出た。

$ npm install -g npm
npm ERR! code EBADENGINE
npm ERR! engine Unsupported engine
npm ERR! engine Not compatible with your version of node/npm: npm@11.1.0
npm ERR! notsup Not compatible with your version of node/npm: npm@11.1.0
npm ERR! notsup Required: {"node":"^20.17.0 || >=22.9.0"}
npm ERR! notsup Actual:   {"npm":"10.2.3","node":"v18.19.0"}

npm@11.1.0 はNode.js v18.19.0では動かないよ、って言われてる。

原因

Node.jsのメジャーバージョンによって、npmの対応するバージョンも変わってくるから、ちゃんと管理しないとダメってことだ。 色々調べた結果、nodenvでNode.jsのバージョンを切り替えるたびに、以下のルールでnpmをインストールし直すのが良さそう。

  • Node.js v10: ^7
  • Node.js v12: ^7
  • Node.js v14: ^9
  • Node.js v16: ^9
  • Node.js v18: ^10
  • Node.js v20以降: 最新版

これで、Node.jsのバージョンを切り替えても、npmで困ることはなくなるはずだ。 Node.jsとnpmのバージョンの組み合わせは、意外と落とし穴が多いから、気をつける必要がある。