Nvm-windows: 无法更新npm(节点8.4.0)

创建于 2017-09-07  ·  127评论  ·  资料来源: coreybutler/nvm-windows

如果这是有关如何使用NVM4W的问题,请改用stackoverflow

如果这是有关防病毒的问题,请确保首先搜索现有问题。

我的环境

  • [] Windows 7或更低版​​本(由于EOL不受真正支持-有关详细信息,请参见Wiki)
  • [] Windows 8
  • [] Windows 8.1
  • [x] Windows 10
  • [] Windows 10 IoT核心版
  • [] Windows Server 2012
  • [] Windows Server 2012 R2
  • [] Windows Server 2016

  • []我的Windows安装不是英语。

我正在使用NVM4W版本:

  • [] 1.1.6
  • [x] 1.1.5
  • [] 1.1.4
  • [] 1.1.3
  • [] 1.1.2
  • [] 1.1.1
  • []较旧
  • []其他(请指定)

我已经...

  • [x]阅读自述文件以了解npm陷阱和防病毒问题。
  • []检查了Wiki ,以确保我的问题尚未解决。
  • [x]验证我正在使用具有管理特权的帐户。
  • [x]搜索了问题(打开和关闭),以确保这不是重复的问题。
  • []确保这不是有关如何在Windows上使用NVM的问题,因为gitter用于提问和评论。

我的问题与(仅检查适用的)有关:

  • [] settings.txt
  • []代理支持(您尝试过版本1.1.0+吗?)
  • [] 32或64位支持(您是否尝试过1.1.3+版本?)
  • []字符转义(您是否尝试过1.1.6及更高版本?)
  • [x]标准外壳环境(终端/ powershell)
  • []非标准的shell环境(Cmder,Hyper,Cygwin,git)

预期行为

npm i -g npm @ latest应该安装最新的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.

重现此问题的步骤:

以管理员身份运行npm i -g npm@latest

help wanted

最有用的评论

我只是删除npmnpm.cmd从的NodeJS位置,移动DIR文件node_modules/npm从的NodeJS位置到另一个位置,并运行node npm-cli.js i -g npm@latestbin dir在已移动的文件夹中。

所有127条评论

这里同样的问题。

我遇到了同样的问题,这是我的解决方法:

运行npm install -g npm并且在运行时
c:\Program Files\nodejs\删除(备份)文件npm.cmdnpm c:\Program Files\nodejs\
c:\Program Files\nodejs\node_modules\npm\node_modules删除(备份) .bin文件夹,然后它应该成功
如果任何其他npm模块files/foldersRefusing to delete问题,则只需删除这些问题并重新启动更新过程即可。 要重新启动,请将npm.cmd复制回c:\Program Files\nodejs\ 。 然后,一旦npm install -g npm运行,删除npm.cmd ,否则您将遇到Refusing to delete npm.cmd问题,您可以重复该过程,直到npm install -g npm满意为止。

要删除文件,您可以使用以下快捷方式:@farnetani建议的mv npm.cmd "c:\Program Files\nodejs\node_modules\npm\node_modules"

我的环境:
windows 7 x64, node 8.4, nvm 1.1.6

image

看到同样的问题

他们自己
窗户10
节点8.5.0
海拔5.3.0
nvm 1.1.0

@kuncevic
较简单的解决方案是从nodejs位置复制目录node_modules/npm ,删除npm bin和cmd,然后在复制的文件夹的bin目录中运行node npm-cli.js i -g npm@latest

这么多的生产。 祝你脚本工作顺利。

他们应该将持续集成重命名为持续整合

@ 19majkel94无法使其与您的方法一起使用...我可以编写脚本的其他任何想法?

看来npm改变了它的更新方式……而没有告诉任何人。 还引入了npx,但仅进行了较小的版本更改(与主要更改相对)...。

显然有一些文件沙箱正在发生。 我今天大部分时间都在研究和尝试修复,但是每个修复都涉及另一个问题。 忍受我,我会尽快解决。 我是目前唯一从事此工作的人……而我恰好处于另一种产品发布的中间(经过2年的工作),因此很高兴接受PR。

希望可以提供帮助,但是我有观察到的...我认为这些问题与“ C:/Program Files/nodejs ”的快捷方式有关。 也许如果使用联结代替快捷方式? Windows无法分辨“真实”目录和联结之间的区别。 因此,看起来节点确实安装在默认目录中。 在已解析目录之外的目录中不再“正在操作”。

https://docs.microsoft.com/zh-cn/sysinternals/downloads/junction

顺便说一句,使用结点应在将来证明nvm4w不受npm行为的任何将来更改。

@ wayne-oscme
您阅读自述文件了吗?

第二种选择是使用符号链接。 此概念需要将符号链接放置在系统PATH中,然后将其目标更新到要使用的节点安装目录。 这是一种直接的方法,似乎是人们的建议。。。直到他们意识到Windows上有多少痛苦的符号链接。 这就是为什么它从未发生过的原因。

为了创建/修改符号链接,您必须以管理员身份运行,并且必须避开Windows UAC(该烦人的提示)。 幸运的是,这是我已经通过节点窗口中的一些帮助程序脚本解决的挑战。 因此,NVM for Windows维护仅在安装过程中放入系统PATH中的单个符号链接。 切换到不同版本的节点只需切换符号链接目标即可。 因此,此实用程序不需要您每次打开控制台窗口都运行nvm use xxx。 当您确实使用xxx运行nvm时,会在所有打开的控制台窗口中自动更新节点的活动版本。 它也将在系统重新引导之间持续存在,因此仅在需要进行更改时才需要使用nvm。

@ 19majkel94
请阅读有关路口的信息。 'symlink'aka窗口的快捷方式在从进程重新解析目标目录时遇到问题。 虽然window的资源管理器和终端似乎很好地处理了它们,但在其他进程中却没有很好地处理它们。 打开记事本,选择打开文件以获取标准窗口的文件对话框。 导航至"C:/Program Files/nodejs"并查看最终结果。

重定向到目标目录(正如我们所看到的那样,该目录是进程结束的地方)可能会导致一些有趣的问题。

连接相当于* nix中的硬链接。 Windows仅支持目录,而不支持文件,但这就是我们所需要的。 它们不是重定向。 出于所有目的和目的,它们是目录,与首次创建目录时创建的路径没有什么不同。

它们不重定向,它们是目的地。 可以使用每个“使用”命令删除并重新创建它们。 因此,它们将具有与快捷方式相同的效果和功能,但是不会造成当前问题的所有下降。

这与结点/硬链接/符号链接无关。 @kuncevic提供了一个屏幕快照,引用了npm错误,关键部分是Refusing to delete ... which is outside of .... 。 这是npm中的硬编码消息,阻止了进一步操作。 底线:npm拒绝完全更新本身。

直到npm 5.xx,这似乎才不是问题,我仍在深入研究细节,以找出发生了什么变化。 我可能不得不写一个我不喜欢的解决方法(即hack)。 我也正在考虑利用msi软件包,这似乎是在npm上引起人们关注的唯一方法。

如果您迫切需要更新npm,则可以通过https://github.com/npm/npm/archive/vX.X.X.zip下载它,并将其解压缩到节点安装根目录的node_modules目录中。 您需要在_node安装root_中手动创建一个符号链接到npm.cmdnpx.cmd 。 最终的文件结构应类似于:

nvm
- v8.5.0
   - node_modules
       - npm
          - bin
               - npm.cmd
               - npx.cmd
          ...
   - node.exe
   - npm.cmd (symlink to v8.5.0/node_modules/npm/bin/npm.cmd)
   - npx.cmd (symlink to v8.5.0/node_modules/npm/bin/npx.cmd)

好吧,我想我应该在出售之前尝试一下。 我将快捷方式替换为
交界处,并得到相同的确切问题。 以为我在那儿有东西。
抱歉浪费您的时间。

在2017年9月27日星期三上午9:38,Corey Butler [email protected]
写道:

这与结点/硬链接/符号链接无关。 @kuncevic
https://github.com/kuncevic提供了一个屏幕快照,引用了npm错误,
关键部分是拒绝删除.....
是npm中的硬编码消息,阻止进一步操作。 底线:
npm拒绝完全更新本身。

直到npm 5.xx,这似乎才不是问题,我仍然在研究
通过细节找出发生了什么变化。 我可能不得不写一个
解决方法(即hack),我从未喜欢过。 我也在寻找
利用msi软件包,这似乎是获得
在npm上引起人们的关注。

如果您迫切需要更新npm,可以通过以下网址下载
https://github.com/npm/npm/archive/vX.XXzip并将其解压缩到
节点安装根目录的node_modules目录。 你需要
节点安装根目录中手动创建到npm.cmd的符号链接,然后
npx.cmd。 最终的文件结构应类似于:

虚拟机

  • v8.5.0

    • node_modules



      • npm





        • 箱子







          • npm.cmd




          • npx.cmd




            ...










    • 节点程序

    • npm.cmd(到v8.5.0 / node_modules / npm / bin / npm.cmd的符号链接)

    • npx.cmd(到v8.5.0 / node_modules / npm / bin / npx.cmd的符号链接)

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/coreybutler/nvm-windows/issues/300#issuecomment-332523342
或使线程静音
https://github.com/notifications/unsubscribe-auth/AEZgRbY_GVys0bfnD_kaM_PYl6QUmZKDks5smk_PgaJpZM4PPcf-

刚更新5.4.1 → 5.4.2没有问题。

c:\>npm install npm -g
C:\Program Files\nodejs\npx -> C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js
C:\Program Files\nodejs\npm -> C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js
+ [email protected]
removed 1 package and updated 2 packages in 12.125s

@kuncevic-谢谢...这表明问题必须在npm 5.4.3+内。

npm -g install [email protected]仍然失败,同样的错误。
[编辑]顺便说一句,从5.3.0开始,它与nvm install 8.5.0一起安装。

2017年9月29日星期五,上午11:41,Corey Butler [email protected]
写道:

@kuncevic https://github.com/kuncevic-谢谢...这表明
问题必须在npm 5.4.3+以内。

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/coreybutler/nvm-windows/issues/300#issuecomment-333161774
或使线程静音
https://github.com/notifications/unsubscribe-auth/AEZgRQnw_jxuz_dDZl3OsZVO_MNkHlBGks5snQ-qgaJpZM4PPcf-

对我来说,它从Node 8.4.0及更高版本失败。 它安装了NPM 5.3.0,然后不允许我对其进行升级。
较旧的节点版本(我有4.8.4)允许NPM正常更新。

人。 npm 5和nvm确实很浪费时间(但是我将npm 5归咎于此,因为4可以很好地工作)。 我上周降级到npm 4.6.1,只是想再尝试5.4.2。 看起来npm在尝试安装react-native-cli(一个完全不同的软件包)时已被卸载

Manuel@Manuel-406 /cygdrive/d/htdocs/wallet
$ npm install -g react-native-cli
C:\Program Files\nodejs\npx -> C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js
npm WARN Error: EPERM: operation not permitted, scandir 'C:\Program Files\nodejs\node_modules\npm\node_modules\libnpx\node_modules\yargs\node_modules\os-locale\node_modules\execa\node_modules\cross-spawn\node_modules\shebang-command\node_modules'
npm WARN  { Error: EPERM: operation not permitted, scandir 'C:\Program Files\nodejs\node_modules\npm\node_modules\libnpx\node_modules\yargs\node_modules\os-locale\node_modules\execa\node_modules\cross-spawn\node_modules\shebang-command\node_modules'
npm WARN   stack: 'Error: EPERM: operation not permitted, scandir \'C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\libnpx\\node_modules\\yargs\\node_modules\\os-locale\\node_modules\\execa\\node_modules\\cross-spawn\\node_modules\\shebang-command\\node_modules\'',
npm WARN   errno: -4048,
npm WARN   code: 'EPERM',
npm WARN   syscall: 'scandir',
npm WARN   path: 'C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\libnpx\\node_modules\\yargs\\node_modules\\os-locale\\node_modules\\execa\\node_modules\\cross-spawn\\node_modules\\shebang-command\\node_modules' }
npm ERR! path C:\Program Files\nodejs\npm
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall open
npm ERR! Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!  { Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!   cause:
npm ERR!    { Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!      errno: -4048,
npm ERR!      code: 'EPERM',
npm ERR!      syscall: 'open',
npm ERR!      path: 'C:\\Program Files\\nodejs\\npm' },
npm ERR!   stack: 'Error: EPERM: operation not permitted, open \'C:\\Program Files\\nodejs\\npm\'',
npm ERR!   errno: -4048,
npm ERR!   code: 'EPERM',
npm ERR!   syscall: 'open',
npm ERR!   path: 'C:\\Program Files\\nodejs\\npm',
npm ERR!   parent: 'v8.5.0' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Manuel\AppData\Roaming\npm-cache\_logs\2017-10-02T14_54_04_833Z-debug.log

Manuel@Manuel-406 /cygdrive/d/htdocs/_git/wallet
$ npm install -g react-native-cli
sh: npm: Kommando nicht gefunden.
  • ubuntu16.04.2 LTS
  • nodejs8.6.0
  • npm5.3.0
npm i -g npm<strong i="15">@latest</strong>

/home/user/.npm-global/bin/npm -> /home/user/.npm-global/lib/node_modules/npm/bin/npm-cli.js
/home/user/.npm-global/bin/npx -> /home/user/.npm-global/lib/node_modules/npm/bin/npx-cli.js
+ [email protected]
added 68 packages, removed 164 packages and updated 14 packages in 14.307s

npm -v仍会打印5.3.0 ,它没有更新吗?

@yavorski-这是Windows的nvm。 我想你想为* nix使用nvm

我已确认此问题是npm 5.xx内的沙箱。npm的先前版本没有此功能。 不幸的是,此修复程序并非易事,根据

是的,我没有nvm。 来自nodesource的Linux + Nodejs。

这里有同样的问题...

npm版本5.4.2
节点版本8.7.0
窗口10

我也有同样的问题。

Windows 10
mv npm.cmd "c:\Program Files\nodejs\node_modules\npm\"

之后

npm i -g npm@latest

解决了我!

我在Node v8.9.0中有类似的行为。 它带有npm 5.5.1,当我尝试降级到npm 4时,它给了我refusing to delete错误。

我试图通过从官方zip文件中拉出npm来手动解决此问题,但出现此错误:
image

我怀疑此错误是静默发生的,并且损坏了安装。 当我安装到C:\nvm ,我没有收到此错误,并且一切正常。

@RichardMisiak您是否尝试将nvm安装移动到更接近C:\的路径? 像C:\nvm吗? 它为我解决了这个问题。

默认情况下,最新的节点9.1带来了最新的npm 5.5.1 ,甚至还有更多的“乐趣” https://github.com/npm/npm/issues/19019 ,用下一个npm表示释放它可能是固定的。

我的解决方案不是很优雅,但是可以。 这里是。
运行npm install [email protected] -g ,出现以下错误:

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

我的解决方法如下:

  1. npm install -g yarn
  2. 重新启动电脑
  3. 运行yarn global bin ,然后将显示的文件夹添加到Windows的PATH env变量中
  4. 转到npm.cmd所在的文件夹(从我们刚在npm install [email protected] -g运行中得到的错误中检查此内容:就我而言d:\node\ )并:
    2.1。 将npm重命名npm.original (或删除它)
    2.1。 将npm.cmd重命名npm.cmd.original (或删除它)
  5. 关闭终端并打开一个新终端
  6. yarn global add [email protected]
  7. npm install [email protected] -g (这将使用yarn global bin文件夹中的npm版本安装npm)
  8. yarn global remove npm (删除yarn安装的npm版本,仅保留npm本身安装的版本)

只需在升级前重命名该批处理即可:
运行cmd

cd %ProgramFiles%\nodejs
ren npm.cmd npm2.cmd
ren npm npm2 
npm2 install npm<strong i="7">@latest</strong> -g

升级后删除文件:

del npm2
del npm2.cmd

@ rolf-schmidiger以我的经验,我必须对npx和npx.cmd进行与npm和npm.cmd相同的重命名。

简单而有效的美味@ rolf-schmidiger。 谢谢。

@coreybutler ,对解决方案有什么想法吗? 只是好奇。 无压力。

这里列出的所有解决方案都不适合我,最后使用nvmw uninstall删除Node安装,然后使用nvmw install重新安装,更快。

nvmw不是一个完全不同的工具吗?

@thegreatco糟糕! 你是对的。 有趣的是,两者都发生相同的问题!

基于@ rolf-schmidiger的回答,我为此创建了一个更新脚本... Kinda很烂,这是我可以使其运行的唯一方法。

#!/usr/bin/bash

cd "$PROGRAMFILES"/nodejs
mv npm.cmd npm2.cmd
mv npm npm2
npm2 install -g npm<strong i="6">@latest</strong>
rm npm2
rm npm2.cmd

更新

这是对我有用的最新消息。

#!/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<strong i="12">@latest</strong>
rm -rf node_modules/npm2/

我是第一次安装所有内容,因此上述建议似乎都不适用于我。 尝试执行npx create-react-app时,我一直收到此消息:

npx : The term 'npx' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.

Windows 10 Pro,内部版本1703,大约在2周前全新安装并启用了开发人员模式
节点版本9.4.0
npm 5.6.0

安装说明有点混乱(有多个文件要下载,该无安装文件是干什么用的?),但我最终发现您必须打开nvm,然后发出“ use”命令,(我,因为我没有使用单独的软件包管理器,所以我以为该部分不适用),但是我仍然遇到上述错误。

我尝试了所有可能的事情。 我卸载了nvm并安装了其他版本,检查了环境路径,没有了主意。 我终于只做了npm install -g npx ,这似乎正在工作。 算了。

我只是删除npmnpm.cmd从的NodeJS位置,移动DIR文件node_modules/npm从的NodeJS位置到另一个位置,并运行node npm-cli.js i -g npm@latestbin dir在已移动的文件夹中。

尝试将使用npm 5.5.1的节点8.8.0升级到节点9.8.0时遇到相同的问题(Windows 10环境),但是安装节点9.8.0不能将我的npm从5.5.1更新到最新版本。 之后,我尝试npm i -g npm并得到错误:

C:\Repository\myproject>npm i -g npm
npm WARN npm npm does not support Node.js v9.8.0
npm WARN npm You should probably upgrade to a newer version of node as we
npm WARN npm can't make any promises that npm will work with this version.
npm WARN npm Supported releases of Node.js are the latest release of 4, 6, 7, 8.
npm WARN npm You can find the latest version at https://nodejs.org/
WARNING: You are likely using a version of node-tar or npm that is incompatible with this version of Node.js.
Please use either the version of npm that is bundled with Node.js, or a version of npm (> 5.5.1 or < 5.4.0) or node-tar (> 4.0.1) that is compatible with Node.js 9 and above.
npm[19860]: src\node_zlib.cc:436: Assertion `args.Length() == 7 && "init(windowBits, level, memLevel, strategy, writeResult, writeCallback," " dictionary)"' failed.
 1: node::DecodeWrite
 2: node::DecodeWrite
 3: uv_loop_size
 4: v8::internal::wasm::SignatureMap::Find
 5: v8::internal::Builtins::CallableFor
 6: v8::internal::Builtins::CallableFor
 7: v8::internal::Builtins::CallableFor
 8: 000003BEBC8843C1

@arfaWong的解决方案非常适合我(我与@ rolf-schmidiger的解决方案混合使用,并重命名而不是移动)

这很简单..如果您在Windows上,请检查https://github.com/felixrieseberg/npm-windows-upgrade
如果要手动执行,请查看文档https://github.com/npm/npm/wiki/Troubleshooting#upgrading -on-windows

我整理了一个PowerShell脚本来自动化@arfaWong解决方案https : //gist.github.com/noahleigh/ba34e18b3e0bc4a6a4e93ed7a480536e

在PowerShell Core 6.0上测试

同样的问题

node-v8.6.0-win-x64
node-v9.9.0-win-x64

如果您重命名文件或移动文件,它将失败并无法创建文件夹,请以管理员身份重新运行。 由于我在这台计算机上没有管理员权限,因此Appart令人怀疑这是否会更改任何内容,因为当前用户在该文件夹中具有mkdir权限...

那什么时候能解决?

@arfaWong摇滚!!

我使用了cmdernvm 1.1.6和node 8.10.0
从npm 5.6.0更新到5.8.0:tada:

cd %programfiles%/nodejs
rm npm npm.cmd
mv node_modules/npm node_modules/npm2
node node_modules\npm2\bin\npm-cli.js i npm<strong i="17">@latest</strong> -g
rm -rf npm2

感谢您的解决方案@ayvarot
我使用了nvm 1.1.15和node 9.8.0
从5.6.0更新到5.8.0

@ayvarot的解决方案对我来说部分

which npm && \
    cd "`which npm | xargs -0 dirname`" && \
    mv npm npm2 && \
    mv npm.cmd npm2.cmd && \
    mv ./node_modules/npm ./node_modules/npm2 && \
    node node_modules/npm2/bin/npm-cli.js i npm<strong i="7">@latest</strong> -g && \
    rm -r npm2 npm2.cmd ./node_modules/npm2

npm -v

(在节点8.10.0 x32上使用nvm 1.1.6并从npm 5.6.0更新到5.8.0)

@arfaWong可行...虽然不是理想的选择...
将等待npm团队对其进行修复...

面对npm 5.6.0

@ayvarot纯Windows DOS版本

pushd %ProgramFiles%\nodejs
del npm npm.cmd
move node_modules\npm node_modules\npm2
node node_modules\npm2\bin\npm-cli.js i npm<strong i="8">@latest</strong> -g
rd node_modules\npm2 /S /Q
popd

@arfaWong解决方案非常有效,谢谢!

Windows 10:
cd(您的nodejs文件夹)
任npm.cmd npm2.cmd
del npm
del npx

npm2安装npm -g

del npm2.cmd

我只是重命名了npm和npx btw,然后将其删除,但是我认为可以立即删除它们。

现在,这似乎是通过使用nvm安装Nodejs版本10.0.0触发的。

@arfaWong唯一

@ rolf-schmidiger为我工作! 谢谢

我通过使用已经安装的Yarn解决了这个问题。

nvm use 10.0.0

# Have npm remove itself
npm uninstall -g npm

# Install npm into the yarn directory structure
yarn global add npm

# Use npm to install itself into the nodejs directory structure
npm install -g npm

# Remove the yarn installation of npm
yarn global remove npm

这对我有用:

nvm use <some_other_version>
cd .../nvm/<version_to_update>
npm un npm
npm i npm<strong i="6">@latest</strong>

使用yarn而不是npm self,尝试yarn global add npm@latest ,如果失败则尝试升级yarn。

当我尝试使用npm install npm<strong i="6">@latest</strong> --global更新npm时,我也收到拒绝删除错误。

尽管这是一个全新的解压缩安装,但npm-windows-upgrade软件包也无法更新,建议重新安装Node.js。

我可以使用以下PowerShell脚本通过移动npm和npx文件进行升级,如先前建议的那样:

# Locate the Node.js installation
# containing the npm and npx files that are preventing the upgrade
Get-Command node.exe | % { Split-Path $_.Source } | cd

$CurrentNpmVersion = npm --version

# Version the current npm scripts to make room for the new version:
"npm", "npm.cmd", "npx", "npx.cmd" | %{ Get-ChildItem -Filter $_ } |
  Rename-Item -NewName { "$($_.BaseName)-$CurrentNpmVersion$($_.Extension)" }

# Use the current npm command to install the new version:
Invoke-Expression "npm-$($CurrentNpmVersion).cmd install npm<strong i="11">@latest</strong> --global"

嗨, @ awarberg,我尝试了您的脚本,但出现此错误。 我也尝试过纱线,没有运气...愚蠢的窗户! 💢

.\update_node.ps1
npm ERR! path C:\Program Files\nodejs\node_modules\npm\node_modules\worker-farm\node_modules\.bin\errno
npm ERR! code EEXIST
npm ERR! Refusing to delete C:\Program Files\nodejs\node_modules\npm\node_modules\worker-farm\node_modules\.bin\errno: is outside C:\Program Files\nodejs\node_modules\npm\node_modules\worker-farm\node_modules\errno and not a link
npm ERR! File exists: C:\Program Files\nodejs\node_modules\npm\node_modules\worker-farm\node_modules\.bin\errno
npm ERR! Move it away, and try again.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\vitom\AppData\Roaming\npm-cache\_logs\2018-05-11T12_55_55_902Z-debug.log

@lamuertepeluda对不起,您仍然无法升级。 之前未提到...\node_modules\.bin\errno的文件。 由于多次升级尝试,这可能是安装损坏。 如npm-windows-upgrade所示,可能是重新安装它的好时机。

至于“愚蠢的Windows”,我不同意。 NPM最初是为Linux设计的,后来又增加了对Windows的支持。 我也经常在其他NPM软件包中看到这一点。 典型的问题是难以安装,并且需要手动和未记录的步骤来确保必备软件。 另一个常见问题是区分大小写的文件系统路径。

如果有人感兴趣,我制作了一个批处理脚本来自动运行@arfaWong的解决方案。

<strong i="7">@echo</strong> off
SETLOCAL EnableDelayedExpansion

if [%1] == [] (
    echo Pass in the version you would like to install, or "latest" to install the latest npm version.
) else (
    set wanted_version=%1

    if "!wanted_version!" == "latest" (
        for /f %%i in ('npm show npm version') do set wanted_version=%%i
    )

    for /f %%i in ('npm -g -v') do set cur_version=%%i

    if "!cur_version!" == "!wanted_version!" (
        echo Already on npm version !wanted_version!.
    ) else (
        echo Updating to !wanted_version!...

        set node_path=!PROGRAMFILES!\nodejs

        rename "!node_path!\npm" npm2
        rename "!node_path!\npm.cmd" npm2.cmd
        rename "!node_path!\node_modules\npm" npm2
        node "!node_path!\node_modules\npm2\bin\npm-cli.js" i npm@!wanted_version! -g

        for /f %%i in ('npm -g -v') do set new_version=%%i

        echo New version installed is !new_version!

        if "!new_version!" == "!wanted_version!" (
            echo Successfully updated to !wanted_version!. Cleaning up backups...
            del "!node_path!\npm2"
            del "!node_path!\npm2.cmd"
            <strong i="8">@RD</strong> /S /Q "!node_path!\node_modules\npm2"
            echo Update complete.
        ) else (
            echo Something went wrong. Rolling back.
            if exist "!node_path!\npm" (
                del "!node_path!\npm"
            )
            if exist "!node_path!\npm.cmd" (
                del "!node_path!\npm.cmd"
            )
            if exist "!node_path!\node_modules\npm" (
                <strong i="9">@RD</strong> /S /Q "!node_path!\node_modules\npm"
            )
            rename "!node_path!\npm2" npm
            rename "!node_path!\npm2.cmd" npm.cmd
            rename "!node_path!\node_modules\npm2" npm
        )
    )
)

我从@kufii的蝙蝠脚本创建了要点。 稍作修改,以便您可以指定要安装的版本,而不是始终安装lastet。

https://gist.github.com/johnmcase/d31b799b9030327091a0e74880e4c530

-编辑:已更新,以反映@kufii上面更新的脚本

@johnmcase好主意,我更新了我的评论,以便您可以传入要安装的版本作为参数(或“最新”以获取最新版本)

@kufii的更新版本对我来说比将所需的数字硬编码到脚本中更好。

@kufii @arfaWong

谢谢!!
notworthy

@johnmcase Worked喜欢一个魅力,添加了书签。

发现此脚本的唯一一个问题:当我选择安装5.6它成功安装了5.6.0并回滚为“ 5.6”与“ 5.6.0”不同...
谢谢您的脚本!

最近在nvm版本1.1.7中再次出现了相同的问题
@arfaWong@ayvarot的解决方案上次有效。 但这一次没有找到Idkw的npm文件夹。 因此,我建议不要删除npm2文件夹,以防万一。

我仅花了将近两天的时间来调试由该问题引起的错误,并尝试了几乎所有修复程序将NPM从5.6.0升级到6.1.0。 @arfaWong的修复对我有效,没有任何其他问题。 谢谢!

@arfaWong作品!!

我使用了yarn方法,但这也可以工作:

  1. https://github.com/npm/cli/releases获取npm
  2. 从您将其解压缩到的目录中的bin文件夹运行以下命令

    • node npm-cli.js i -g npm@latest

    • 它可能会抱怨需要删除文件,对我来说,我的nvm和nodejs在驱动器的根目录中,因此标准程序文件位置对我不适用。 我从nodejs文件夹中删除了npm / npx / node_modules(我不怕重新下载软件包,现在无论如何我都在进行全新安装)。

  3. 它应该可以正确安装,并且您应该能够删除提取的文件夹并从中获利!

与我写的这个stackoverflow非常相似。
https://stackoverflow.com/questions/49748307/how-to-reinstall-npm

@ayvarot非常感谢! 您的建议在Windows 10上对我有用。

仅重命名%Node%\npm.cmd%Node%\npm%Node%\npx.cmd不需要重命名目录

@peternann的建议解决方案在这里也有效。
https://github.com/coreybutler/nvm-windows/issues/389

由于某种原因,上面的脚本对我不起作用,我简直太累了,无法解决这个问题以找出原因。

这个可笑的错误仍然存​​在,所以我做了一个脚本来完成这项工作。 必须放在npm.cmd所在的Node文件夹中。

:: Update NPM with workaround of "npm ERR! code EEXIST" bug https://github.com/coreybutler/nvm-windows/issues/300

<strong i="7">@ECHO</strong> OFF

SETLOCAL

SET CDir=%~dp0%

REN "%CDir%\npm.cmd" "npm1.cmd"
DEL "%CDir%\npm"
DEL "%CDir%\npx.cmd"
DEL "%CDir%\npx"

CALL "%CDir%\npm1.cmd" update && DEL "%CDir%\npm1.cmd"

将其另存为npmup.cmd并使用,而不是npm update

使用@kufii脚本时
请注意,如果像我一样更改了node.js的路径,则应替换安装位置,只需将代码set node_path=!PROGRAMFILES!\nodejs替换为set node_path=YOUR_NODE_PATH

@kraihn解决方案现在不适用于最新的纱线,除非您将纱线仓添加到路径中:

  1. 通过yarn global bin获取垃圾箱path yarn global bin
  2. 将纱线箱path放入path变量中

一年一次,我很兴奋,决定在Windows上安装NVM,以为“这次可以使用”,但是总有问题……哦,好吧,我想它又回到了Node.js经典安装程序。 我会使用WSL,但不幸的是,某些Electron应用程序要求您在主机操作系统上安装Node。

仅NVM真的不能解决此问题吗?
据我在不同线程中阅读的内容,这也可能是npm或Node的问题,但是单独使用NVM可以做些什么吗? 否则,这种问题会导致NVM在Windows上无用。
在更新过程中必须自己删除文件,甚至为此创建脚本或某些人提到的解决方法,这都不是解决方案。 妈的
我尝试过的唯一一件事(在另一个线程中发表评论,而不是在这个话题中,提到了如何使用yarn添加npm的一些步骤)不起作用。

@MrCroft虽然我同意让它“正常运行”会很好,但事情远非“地狱”,甚至远非“无用”。
大约两年前,我一直是这个项目的快乐用户。
仅当您要更新全局npm本身时,才会出现此问题。 通过nvm安装新节点版本没有问题,并且新节点附带了较新的npm软件包。
如果您发现自己在开发环境中升级npm的次数如此之多,以致您的生活因此陷入困境,那么您可能在做错事。
我认为自从成为nvm用户以来,只有两次我必须实际升级npm本身并解决此问题。 没有听起来那么糟糕。

这是我在nvm上升级npm的脚本:

https://stackoverflow.com/a/50955293/491553

我只是在新安装上做了。 效果很好。

也许有人应该在没有管理员权限的情况下测试npm更新器...

我认为这比nvm更像是以前的npm版本错误。

但是,要更新npm,请在nvm/[node version]文件夹中删除(对我来说是v10.15.3 )以下文件:

C:\Users\[user name]\AppData\Roaming\nvm\[node version]\npm
C:\Users\[user name]\AppData\Roaming\nvm\[node version]\npm.cmd
C:\Users\[user name]\AppData\Roaming\nvm\[node version]\npx
C:\Users\[user name]\AppData\Roaming\nvm\[node version]\npx.cmd

npm文件夹

C:\Users\[user name]\AppData\Roaming\nvm\[node version]\node_modules\npm2

打开具有管理员权限的任何控制台(甚至右键单击vscode快捷方式,而不是右键单击Visual Studio Code并单击以管理员身份运行),然后键入命令:

cd C:\Users\[user name]\AppData\Roaming\nvm\[node version]\node_modules\npm2\bin
node npm-cli.js i -g npm<strong i="22">@latest</strong>

更新:正如@ Fr0sT-Brutal指出的那样,此时不需要管理员权限,因为我们刚刚删除了造成冲突的文件👍

做完了

删除C:\Users\[user name]\AppData\Roaming\nvm\[node version]\node_modules\npm2文件夹。

(这只是一步一步地复制@ 19majkel94上面所说的内容)

@createdbyjurand没有管理员权限...
您不需要管理员权限即可将一堆文件替换为另一堆文件...
(只要您对文件/目录具有写访问权限)

@createdbyjurand没有管理员权限...
您不需要管理员权限即可将一堆文件替换为另一堆文件...
(只要您对文件/目录具有写访问权限)

我知道。 但是,Windows 10上的Program Files文件夹具有特定的权限访问权限。 这就是为什么许多应用程序最近会在漫游或本地文件夹中自行安装的原因。 甚至Visual Studio Code也有两个单独的安装。 一种用于本地,另一种用于程序文件。 解决此问题的一种方法是更改​​nvm nodejs文件夹的位置。 其次,更改文件夹安全性选项,但这会使该文件夹不安全。 我写的是@ 19majkel94写的,是一种解决npm更新的方法,使用标准的nvm install和默认设置供那些只想解决问题而又不涉及越来越多的系统或配置更改的人使用。 因为即使更改文件夹或访问权限,您仍然必须执行我列出的所有步骤,唯一的更改将是使用没有管理员权限的控制台。

@createdbyjurand :只是说,我们在公司环境中运行节点,作为开发人员,我们没有管理员权限。 如果npm-update或其中的脚本需要管理员权限,则会破坏我们的开发环境,然后我们将无法安装任何节点程序包,然后我们将无法工作。

@createdbyjurand您需要什么管理员权限?

@createdbyjurand您需要什么管理员权限?

好点,我不是,因为我刚刚删除了造成冲突的文件👍

哦,我懂了。 我从没想过在PF中安装NPM,对我来说很奇怪。 我要说的是造成麻烦的原因:)。

哦,我懂了。 我从没想过在PF中安装NPM,对我来说很奇怪。 我要说的是造成麻烦的原因:)。

最近是的。 Microsoft更改了对Program Files文件夹的访问权限。 这就是为什么许多软件现在都转向漫游本地文件夹安装目录的原因。 这就是为什么不久前npm一切正常的原因,而现在突然我们得到了这一点:

$ npm i -g npm<strong i="11">@latest</strong>
C:\Program Files\nodejs\npx -> C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js
npm ERR! path C:\Program Files\nodejs\npm
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall open
npm ERR! Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!  { [Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm']
npm ERR!   cause:
npm ERR!    { Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!      errno: -4048,
npm ERR!      code: 'EPERM',
npm ERR!      syscall: 'open',
npm ERR!      path: 'C:\\Program Files\\nodejs\\npm' },
npm ERR!   stack:
npm ERR!    'Error: EPERM: operation not permitted, open \'C:\\Program Files\\nodejs\\npm\'',
npm ERR!   errno: -4048,
npm ERR!   code: 'EPERM',
npm ERR!   syscall: 'open',
npm ERR!   path: 'C:\\Program Files\\nodejs\\npm' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\fehTH4RTH\AppData\Roaming\npm-cache\_logs\2019-03-22T14_28_26_153Z-debug.log

哦,我懂了。 我从没想过在PF中安装NPM,对我来说很奇怪。 我想说的是造成麻烦的原因:)

@ Fr0sT-野蛮的,为了组织起见,我也这样做。 如果我已经有一个为应用程序(程序文件)指定的系统文件夹,则每当我安装任何东西时-都将其安装在“程序文件”文件夹中。 特别是不要使用“ nodejs”或“ nvm”之类的随机文件夹来污染驱动器的根文件夹,也不要使用诸如“ c:/ Users / My Name / Roaming / ApplicationData / whatever”之类的长路径,我更喜欢使用“ c :/程序文件/任何内容”。
尽管如此,尽管它确实会困扰我像那样工作(将nvm | node放置在程序文件之外的位置),但是...我至少已经尝试过并将其安装在c:/ nvm中(至于节点版本,我已经尝试了c:/ node和nvm的子文件夹:c:/ nvm / node之类的东西)。 但是问题仍然存在,npm仍然无法通过运行npm i -g npm来更新。 感谢上帝,因为我不想忍受Program Files文件夹之外安装的东西。 当然,我最终放弃了,并且始终始终使用1版本的node,使用来自nodejs.org的Windows默认节点安装程序进行安装

@createdbyjurand最近? 自XP以来,IIRC,PF对用户的写权限受到限制。
@MrCroft我一直想知道人们如何才能将所有埋在PF中的东西生活在一起……路径中的空间意味着始终需要引用,x64-PF和x32-PF的疯狂添加了一个搜索迭代,而且-最令人沮丧的是-完全扁平的软件结构。 我什至在家用PC上有100多个应用程序,在工作中甚至有50多个应用程序。 如果必须在PF中搜索应用程序,我会跳出窗口。

您不必将其放入
C:/Users/My Name/Roaming/Whatever
您可以使用任何目录,只要它是用户可写的即可。

我在D:Programs上拥有所有程序,它们都不要求管理员权限,包括nodejs,python,cmake,JetBrains,go,OpenOffice等。

然后,我将它们全部放入current_user的路径环境变量和注册表中。
奇迹般有效。
无需笨拙的黑盒安装程序。

如果需要查找任何内容,可以使用locate32,甚至不浏览文件夹/ Desktop / StartMenu。
Locate32只是速度更快。
或者我通过CTRL + R运行它们,因为您可以在HKCU的注册表中设置别名。

C:\ProgramFiles包含某些内容的唯一原因是,当您想为计算机上的每个用户安装特定的应用程序时,大多数情况下您都不希望这样做,因为在系统范围的路径/注册表中有程序可能会破坏其他用户的程序,或者禁止他们使用与您使用的版本不同的版本。 而且,它在服务器上派上用场-user1可以使用他的nodejs,user2可以使用另一个nodejs,并且它不会咬自己。

通过删除管理员权限并将所有内容保留在用户中,您可以确保一个用户不会破坏另一用户的程序和设置。 另外,您还可以确保应用程序在没有管理员权限的情况下运行,这有时可能会派上用场。 而且,在最坏的情况下,您始终可以删除并清除用户帐户,然后再重新评估。

这样,我可以运行大约1000个程序,而无需花一分钟的时间来安装所有程序。
甚至JetBrains IDE和PostgreSQL都可以这样工作。
我唯一无法像这样工作的程序是MS-Office,SQL-Server和Visual-Studio。
不应该将npm添加到这个臭名昭著的列表中,这都是因为不能麻烦移动一些现有文件而不是覆盖它们。

无论如何,我现在有自己的nodejs-update-script ,它可以从path环境变量中检测nodes文件夹。

我刚刚将这些文件重命名为“ 1”
npm1.cmd,npm1,npx1,npx1.cmd

并运行:
npm1更新-g

看起来不错,有什么想法吗?

也许可以将其内置到nvm中-也许通过在安装时添加npm version标志以及节点版本和体系结构标志,以及update-nvm函数

我刚刚将这些文件重命名为“ 1”
npm1.cmd,npm1,npx1,npx1.cmd

并运行:
npm1更新-g

看起来不错,有什么想法吗?

它也对我有用,但是我必须删除该文件夹
nvmv10.15.3node_modulesnpmnode_modules.bin
因为指向该文件夹的错误仍然出现。

谢谢!

大家好,我已经制作了一个软件包来更新Program Filesnodejs的本地npm版本
查看
npm install -g npm-win-upgrade
npm-win-upgrade

不确定是否与NVM完全兼容,但是它使用process.execPath来定位node.exe文件夹,因此应该这样做。

@dolpsdw运行npm-win-upgrade时出现以下错误:

Npm instaled as Global package: uninstalling...                                                                     
(node:10192) UnhandledPromiseRejectionWarning: Error: Command failed: npm uninstall npm -g                          
npm ERR! path C:\Program Files\nodejs\npx.cmd                                                                       
npm ERR! code EEXIST                                                                                                
npm ERR! Refusing to delete C:\Program Files\nodejs\npx.cmd: is outside C:\Program Files\nodejs\node_modules\npm and
 not a link                                                                                                         
npm ERR! File exists: C:\Program Files\nodejs\npx.cmd                                                               
npm ERR! Move it away, and try again.                                                                               

npm ERR! A complete log of this run can be found in:                                                                
npm ERR!     C:\Users\sjodle\AppData\Roaming\npm-cache\_logs\2019-04-23T17_42_11_305Z-debug.log                     

    at ChildProcess.exithandler (child_process.js:281:12)                                                           
    at emitTwo (events.js:126:13)                                                                                   
    at ChildProcess.emit (events.js:214:7)                                                                          
    at maybeClose (internal/child_process.js:915:16)                                                                
    at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)                                        
(node:10192) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing
 inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (
rejection id: 1)                                                                                                    
(node:10192) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejec
tions that are not handled will terminate the Node.js process with a non-zero exit code.                            

@sodle

第一个错误(node:10192命令失败:npm卸载npm -g):发生此错误是因为在%appdata%npm文件夹中检测到npm已安装为全局npm,但这可能是旧的节点缓存。 这可以通过npm list -g detection修复。

关于我的第二个错误,“拒绝删除” ...的错误听起来像“管理员”特权,该过程中未授权。 (UAC提示被拒绝了吗?)

尝试执行脚本并接受Admin权限缩放,如果不能解决该问题,请告诉我您的Origin节点版本以重现该错误。

@dolpsdw我很确定它们都是同一错误的一部分

无论如何,我不再拥有发生错误的机器。 如果替换时遇到相同的问题,我会通知您。

你好@rsshilli
感谢您提供脚本。 它运行良好,可以根据需要将npm更新为最新版本。
我面临的唯一小问题是,运行npm list -g --depth=0列出所有节点程序包会导致两次安装npm。
因此,我只添加了几行代码就删除了“ ...-旧”重命名的文件和“ ...-旧”重命名的文件夹。
运行npm list -g --depth=0列出所有节点程序包会根据需要进行一次npm安装。
这是我的脚本更新版本:
cd %APPDATA%\nvm\v8.9.0 # or whatever version you're using
mv npm npm-old
mv npm.cmd npm-old.cmd
cd node_modules\
mv npm npm-old
cd npm-old\bin
node npm-cli.js install -g npm@latest

cd %APPDATA%\nvm\v8.9.0 # or whatever version you're using
rm npm-old
rm npm-old.cmd
cd node_modules\
rm -rf npm-old

这是我在nvm上升级npm的脚本:

https://stackoverflow.com/a/50955293/491553

我只是在新安装上做了。 效果很好。

@dolpsdw npm-win-upgrade失败,错误与npm install -g npm
还有另一个包npm-windows-upgrade ,它也失败了,但没有说明原因(我想是一样的)。

@ Markus-Hanisch @rsshilli感谢您的脚本。

以此为起点,我想添加以下通用的powershell脚本,无论您当前的Node版本和nvm位置如何,它都可以升级NPM:

Push-Location (Join-Path (Split-Path (Get-Command nvm).Path) (node --version))
  Move-Item npm npm-old
  Move-Item npm.cmd npm-old.cmd
  Move-Item npx.cmd npx-old.cmd
  Push-Location .\node_modules
    Move-Item npm npm-old
    Push-Location .\npm-old\bin
      node npm-cli.js install -g npm<strong i="8">@latest</strong>
    Pop-Location
    Remove-Item npm-old -Recurse
  Pop-Location
  Remove-Item npx-old.cmd
  Remove-Item npm-old.cmd
  Remove-Item npm-old -Recurse
Pop-Location

(唯一的假设是nvm将其版本与exe文件存储在一起,并根据node --version的输出来命名它们)

通读该线程; 最后,祝我好运,使用添加/删除程序卸载和重新安装node.js。

像一年前一样,通过打开mac来为我解决问题;)

@kuncevic

像一年前一样,通过打开mac来为我解决问题;)

已更正:
像一年前一样,我通过打开mac来
:rofl:

@ kuncevic ,@ Fr0sT-残酷:
并且在硬件方面放弃了选择的自由。
根本不是一个很好的权衡。
另外,您将放弃对计算机上运行的软件的控制。
如果您需要切换到某个地方,请切换到Linux-对于服务器而言,这是更好的选择。

https://blog.npmjs.org/post/189618601100/binary-planting-with-the-npm-cli

我为Windows删除了nvm。 2年后,即使使用最新的节点版本,它仍无法正常工作

伙计们,这是一个npm问题,而不是NVM4W问题。 https://github.com/felixrieseberg/npm-windows-upgrade上有一个实用程序可以帮助解决此问题

我刚刚将这些文件重命名为“ 1”
npm1.cmd,npm1,npx1,npx1.cmd

并运行:
npm1更新-g

只需将文件npm1.cmd重命名,就足够了。 然后运行npm更新。

无需使用npm-windows-upgrade

@coreybutler我并不完全相信这一点。 NPM-Windows的升级并没有为我工作。 然后,在我手动清除了顶层脚本(其他脚本也在这里重命名,以及npx脚本)之后, node (Join-Path $env:NVM_SYMLINK 'node_modules\npm\lib\npm.js') install -g npm最初起作用,而npm install -g npm用于以后的更新而无需人工干预。 似乎最初的npm安装被某种方式破坏了。

即使这是npm由于安装程序损坏或某种原因(而不是nvm)造成的故障,nvm可以减轻问题的一个步骤是清除这些脚本本身,并在创建初始版本环境时立即调用更新。 或者至少它可以提供一个选项或命令来这样做。

@kuncevic建议改善您的说明:

而不是来回复制文件或尝试在进程运行时尝试足够快地移动它们,只需直接使用node命令调用npm的脚本即可。

电源外壳:

node (Join-Path $env:NVM_SYMLINK 'node_modules\npm\lib\npm.js') install -g npm

命令提示符:

node "%NVM_SYMLINK%\node_modules\npm\lib\npm.js" install -g npm

然后,您只需删除一次文件,然后重新启动该过程,而无需根据需要将其放回原处。

我尝试了@ bladeoflight16,但收到此错误。

C:\Users\woonk>node %NVM_SYMLINK%\node_modules\npm\lib\npm.js install -g npm
internal/modules/cjs/loader.js:796
    throw err;
    ^

Error: Cannot find module 'C:\Program'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:793:17)
    at Function.Module._load (internal/modules/cjs/loader.js:686:27)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
    at internal/main/run_main_module.js:17:11 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

@ mattdamon108对不起。 如果路径中有空格,则需要用cmd引用路径。 我更新了帖子。 谢谢。

在Windows上遇到此错误,并想还原为项目的较旧npm,我以一种非常温和的方式转到了npm命令已经形成的符号链接位置,并将node_modules中的npm文件夹重命名为其自己的版本名称,然后下载我需要的版本,并创建了一个名为npm的文件夹,并将下载的内容转储到该文件夹​​中!

@coreybutler您的创建符号链接的建议无效,因为Windows抱怨符号链接已存在。 同样在Windows中,快速编辑符号链接很麻烦。 另外,我需要定期在npm的两个版本之间切换。 因此,我做到了。

我刚刚将这些文件重命名为“ 1”
npm1.cmd,npm1,npx1,npx1.cmd
并运行:
npm1更新-g

只需将文件npm1.cmd重命名,就足够了。 然后运行npm更新。

无需使用npm-windows-upgrade

@xmedeko @chidveer也许我在这里丢失了一些东西,但是与运行npm update之前手动重命名文件相比, npx npm-windows-upgrade更直接?

@jakobrosenberg npm-windows-upgrade不适用于我。 也许我做错了什么,也许我尝试过升级,等等。 IMO一个文件重命名比学习更简单,为什么npm-windows-upgrade无法正常工作以及如何修复它。

注意:建议全局使用npm-windows-upgrade ,因此您应以npm-windows-upgrade而不是npx npm-windows-upgrade身份运行它。

@xmedeko不会npx npm-windows-upgrade全局运行,除非您位于本地安装npm-windows-upgrade的节点项目中?

@jakobrosenberg是的,您是对的,我不知道npx行为如此,我始终只将其用于本地项目包。

一个批处理脚本,可以正常工作。
https://gist.github.com/nokidding/aafaf90adc80cbce54b676340817bb13

像魅力一样工作
只要确保'set node_path =!PROGRAMFILES!nodejs'在您的情况下指向正确的路径
特别是在没有标准安装的情况下(zip解压缩)

同样的问题!
我如何解决的:

  1. 控制面板=>卸载程序
  2. 删除NodeJS应用
  3. 删除程序文件上的所有NodeJS文件夹
  4. 全新安装Node JS

我只需要第4步,即只需下载并重新安装Node JS。
然后它起作用了。

重新安装节点版本可以正常工作,但是由于这是与nvm相关的问题,为什么不使用nvm来解决此问题? 对我而言,与其遍历添加/删除程序,不如将其全部保留在命令行中更加快捷/简单。 例如:

nvm uninstall VERSION
nvm install VERSION

之后,关闭并重新打开外壳。 快速简便(至少现在知道)。 😄

如果您有任何问题(例如nvm表示已安装该版本),请检查与该版本关联的文件夹是否仍然存在(例如%NVM_HOME%\VERSION )以及文件node.exe仍不存在。 如果仍然存在,请确保您还没有任何可能正在运行节点的应用程序(例如,在我的情况下,我的IDE正在运行该节点,因此我将其关闭并能够完全删除)。

编辑: ⚠️我想这个简单的解决方案会带来一个重要的副作用:它将删除您全局安装的软件包……嗯……手动重新安装这些软件包可能仍然更简单。 被警告! ⚠️

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

flpms picture flpms  ·  4评论

leiamac picture leiamac  ·  4评论

hsali picture hsali  ·  4评论

keylowgee picture keylowgee  ·  6评论

AllainPL picture AllainPL  ·  7评论