Help us understand the problem. What is going on with this article?

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 でエラーが出なくなり、次回以降のアップデートができるようになりました。

jay-es
アパレルECでフロントやってます。 Zenn にも記事あります https://zenn.dev/jay_es
https://zenn.dev/jay_es
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away