通过nvm升级节点和npm,但旧节点仍用于全局包

问题描述 投票:2回答:3

我已经使用节点9.3.0很长一段时间了,但我最近迁移到10.12.0。一切都很顺利,当我做node -vnpm -v我得到正确的版本:

Paul-Bergs-Macbook:node paulrberg$ node -v
v10.12.0
Paul-Bergs-Macbook:node paulrberg$ which node
/Users/paulrberg/.nvm/versions/node/v10.12.0/bin/node
Paul-Bergs-Macbook:node paulrberg$ npm -v
6.4.1
Paul-Bergs-Macbook:node paulrberg$ which npm
/Users/paulrberg/.nvm/versions/node/v10.12.0/bin/npm

但是,当我尝试运行任何npm命令时,会使用旧版本。那是:

Paul-Bergs-Macbook:node paulrberg$ npm i truffle -g
/Users/paulrberg/.nvm/versions/node/v9.3.0/bin/truffle -> /Users/paulrberg/.nvm/versions/node/v9.3.0/lib/node_modules/truffle/build/cli.bundled.js
+ [email protected]
added 81 packages from 311 contributors in 1.715s

和:

npm list -g --depth=0
/Users/paulrberg/.nvm/versions/node/v9.3.0/lib
└── [email protected]

不确定这是否仍然指向最后一个版本的一些bash代码,但我似乎无法找到任何证据。运行env并检查9.3.0环境变量不会产生任何结果。

到目前为止我做了什么:

  • 使用nvm uninstall 9.3.0删除节点9.3.0
  • 删除它并重新启动计算机后,重新安装nvm
  • nvm reinstall-with-packages
  • 之后删除了~/.nvmrc并在那里设置了10.12.0
  • 检查我是否有自制的重叠节点,我不知道问题是什么?
node.js npm node-modules nvm
3个回答
5
投票

经过几个小时的Unix调试,我意识到问题是我在npm config中设置了一个前缀:

prefix = "/Users/paulrberg/.nvm/versions/node/v9.3.0"

如果你遇到类似的问题,请务必通过以下方式取消设置:

npm config rm prefix

这确实是mentioned,虽然不一定在nvm页面上闪耀:

如果您有〜/ .npmrc文件,请确保它不包含任何前缀设置(与nvm不兼容)


1
投票

看起来你可能需要运行nvm reinstall-packages

https://github.com/creationix/nvm#migrating-global-packages-while-installing

这说


安装时迁移全局包如果要安装新版本的Node.js并从先前版本迁移npm包:

nvm install node --reinstall-packages-from=node

这将首先使用“nvm版本节点”来标识您要从中迁移包的当前版本。然后它解析新版本以从远程服务器安装并安装它。最后,它运行“nvm reinstall-packages”将你之前版本的Node的npm软件包重新安装到新版本。

您还可以从特定版本的Node安装和迁移npm软件包,如下所示:

nvm install 6 --reinstall-packages-from=5 nvm install v4.2 --reinstall-packages-from=iojs


另一个“解决方案”不是使用全局包。特别是当使用nvm并且无法确定全局包是否适用于“当前”版本时,最好在本地安装并使用npx来运行本地命令

当你使用truffle时,truffle将npm install命令安装到./node_modules/.bin,这样你就可以运行npx truffle而不是truffle来运行全局的


编辑:

要检查的另一件事是node -vnvm current不一定报告相同的版本。

我想知道nvm current会不会为你报告v9.3?

enter image description here

啊,是的,在我的机器上,我可以在node -v报告的不同位置全球安装松露

enter image description here

 > node -v
v9.5.0
 > nvm current
system
 > nvm use v8
Now using node v8.4.0 (npm v5.3.0)
 > node -v
v8.4.0
 > nvm current
v8.4.0
 > npm install -g truffle
/Users/pauldambra/.nvm/versions/node/v8.4.0/bin/truffle -> /Users/pauldambra/.nvm/versions/node/v8.4.0/lib/node_modules/truffle/build/cli.bundled.js
+ [email protected]
added 81 packages in 4.364s

所以你可能会错过nvm use v10命令


0
投票

我认为更持久的解决方案是来自支持文档的this section

安装时来自文件的默认全局包

如果您希望每次安装新版本时都安装默认软件包列表,我们也支持 - 只需将软件包名称(每行一个)添加到文件$ NVM_DIR / default-packages中。您可以在命令行中添加npm作为包参数接受的任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.