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
特有の問題であることが判明しました。
- 2020/01/27 追記: 上記の issue はその後も伸び続け、最終的に専用のモジュールがリリースされたようです。
felixrieseberg/npm-windows-upgrade: Upgrade npm on 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
でエラーが出なくなり、次回以降のアップデートができるようになりました。