問題解決のためにこの記事にたどり着いた方は、下記のコマンドを実行してnpmを再実行してみてください。
harh -r
背景
ubuntu22.04で最新のnpmを使おうとnコマンドを利用して更新したところ、semverが見つからないというエラーが発生して動かなくなりました。試行錯誤したところ、nコマンド実行後に表示されるhashコマンドを実行すると直りました。
備忘録として関連情報を記事に残します。
利用環境
ubuntu22.04hash更新コマンドを実行しないと発生した不具合
npmコマンドを実行すると下記のようなエラーが発生して困りました。node:internal/modules/cjs/loader:1144
const err = new Error(message);
^
Error: Cannot find module 'semver'
Require stack:
- /usr/share/nodejs/npm/lib/utils/unsupported.js
- /usr/share/nodejs/npm/lib/cli.js
- /usr/share/nodejs/npm/bin/npm-cli.js
at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
at Module._load (node:internal/modules/cjs/loader:985:27)
at Module.require (node:internal/modules/cjs/loader:1235:19)
at require (node:internal/modules/helpers:176:18)
at Object.<anonymous> (/usr/share/nodejs/npm/lib/utils/unsupported.js:2:16)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
at Module.load (node:internal/modules/cjs/loader:1207:32)
at Module._load (node:internal/modules/cjs/loader:1023:12)
at Module.require (node:internal/modules/cjs/loader:1235:19) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/usr/share/nodejs/npm/lib/utils/unsupported.js',
'/usr/share/nodejs/npm/lib/cli.js',
'/usr/share/nodejs/npm/bin/npm-cli.js'
]
}
Node.js v20.11.1
最新のnpmをインストールするコマンド
下記のコマンドでubuntuのnpmを最新にしました。nodejsのページからtarをダウンロードする方法もありますが、自分はaptでダウンロードしたnpmでnをインストールし、そのnで最新版に更新しました。
sudo apt install -y npm
sudo npm install -g n
sudo n stable
hash -r
上記の最後のhashコマンドが重要です。
nでnode環境を更新すると下記の情報が表示されたのでそれに従いました。
Note: the node command changed location and the old location may be remembered in your current shell.
old : /usr/bin/node
new : /usr/local/bin/node
If "node --version" shows the old version then start a new shell, or reset the location hash with:
hash -r (for bash, zsh, ash, dash, and ksh)
rehash (for csh and tcsh)
自分はbash環境を使っているので「hash -r」を実行しましたが、cshやtcshを利用している方は「rehadh」を実行してください。
余談: npm全消し(アンインストール)コマンド
試行錯誤のときにnode環境を全消ししてインストールし直すのを繰り返した際に実施した全消しコマンドです。sudo apt purge -y nodejs npm
sudo apt autoremove -y
sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* ~/.npm
sudo rm -rf /usr/local/lib/node*
sudo rm -rf /usr/local/bin/node*
sudo rm -rf /usr/local/include/node*
sudo rm -rf ~/.npm
この後aptでnpmをインストールすると、古いnpmが実行可能な環境に戻ります。
おわり
nコマンドを実行するとnpmが壊れて戸惑いましたが、「hash -r」(もしくは「rehash」)コマンドを実行すれば直ると分かって良かったです。参考
npmが動かない(Cannot find module 'semver')Npm can't find module "semver" error in Ubuntu 19.04
0 件のコメント :
コメントを投稿