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

时间:2018-10-21 11:51:18

标签: node.js npm node-modules nvm

我使用节点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
+ truffle@4.1.14
added 81 packages from 311 contributors in 1.715s

并且:

npm list -g --depth=0
/Users/paulrberg/.nvm/versions/node/v9.3.0/lib
└── truffle@4.1.14

不知道这是否是仍指向最新版本的bash代码,但是我似乎找不到任何证明。运行env并检查9.3.0环境变量不会产生任何结果。

我到目前为止所做的:

  • 使用nvm uninstall 9.3.0删除节点9.3.0
  • 删除并重启计算机后重新安装nvm
  • nvm reinstall-with-packages
  • 删除~/.nvmrc,然后在其中放置10.12.0
  • 检查我是否有来自自制的重叠节点,但没有 可能是什么问题?

3 个答案:

答案 0 :(得分:5)

在经过数小时的Unix痛苦的调试之后,我意识到问题是我在npm config中设置了前缀:

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

如果您偶然发现了类似的问题,请确保通过以下操作取消设置该问题:

npm config rm prefix

这确实是mentioned,尽管不一定会在nvm页面上发光:

  

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

答案 1 :(得分: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”以将npm软件包从以前的Node版本重新安装到新版本。

     

您还可以像这样从特定版本的Node安装和迁移npm软件包:

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


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

松露菌truffle会在./node_modules/.bin中安装npm install命令,以便您可以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
+ truffle@4.1.14
added 81 packages in 4.364s

因此,您可能缺少nvm use v10命令

答案 2 :(得分:0)

我认为,支持文档中的this section是更永久的解决方案。

  

安装时文件中的默认全局软件包

     

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