nvm環境でnpmのアップデートができない時の対処法

npm本体のバージョンが最新でない場合、npmコマンドを使用した後に、
更新を促すメッセージが表示されることがあります。

Update available X.X.X → X.X.X
Run npm i -g npm to update

しかし、上記コマンドを実行しても下記のようなエラーが出て、
npmをインストールすることができませんでした。

npm ERR! path C:\Program Files\nodejs\npm.cmd
npm ERR! code EEXIST
npm ERR! Refusing to delete C:\Program Files\nodejs\npm.cmd: is outside C:\Program Files\nodejs\node_modules\npm and not a link
npm ERR! File exists: C:\Program Files\nodejs\npm.cmd
npm ERR! Move it away, and try again.

解決策がないかを検索してみたところ、nvm-windowsのissueページが見つかり、
nvm-windows特有の問題であることが判明しました。
上から順に読み進めて、記載されているコマンドをいくつか試したところ、
成功したのがstramel氏が書いた下記の内容でした。

#!/usr/bin/bash

cd "$PROGRAMFILES"/nodejs
rm npm npx npm.cmd npx.cmd
mv node_modules/npm node_modules/npm2
node node_modules/npm2/bin/npm-cli.js i -g npm@latest
rm -rf node_modules/npm2/

※コマンドプロンプト等を使用している場合は、下記のコマンドで同等の処理になります。

cd %ProgramFiles%\nodejs
del npm npx npm.cmd npx.cmd
move node_modules\npm node_modules\npm2
node node_modules\npm2\bin\npm-cli.js i -g npm@latest
rd /S /Q node_modules\npm2

要は program files/nodejs ディレクトリがシンボリックリンクになっていて、
その中のファイルを消す時にエラーになっているのが原因なので、
一旦リネームすることでエラーを回避しています。

自分の場合、一度上記コマンドでアップデートを実行した後は
npm i -g npm でエラーが出なくなり、次回以降のアップデートができるようになりました。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.