[英]How to migrate global node packages that are not registered at the npm registry using nvm?
[英]Upgraded node and npm via nvm, but old node is still used for global packages
我已经使用节点9.3.0很长一段时间了,但我最近迁移到10.12.0。 一切都很顺利,当我做node -v
和npm -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
删除节点nvm uninstall 9.3.0
nvm reinstall-with-packages
~/.nvmrc
并在之后设置10.12.0
经过几个小时的Unix调试,我意识到问题是我在npm config
设置了一个前缀:
prefix = "/Users/paulrberg/.nvm/versions/node/v9.3.0"
如果你遇到类似的问题,请务必通过以下方式取消设置:
npm config rm prefix
确实提到了这一点,尽管不一定会在nvm页面上发光:
如果您有〜/ .npmrc文件,请确保它不包含任何前缀设置(与nvm不兼容)
看起来您可能需要运行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
来运行本地命令
当你npm install
它时,松露会为./node_modules/.bin安装一个truffle
命令,这样你就可以npx npx truffle
运行本地truffle
而不是truffle
来运行全局
编辑:
要检查的另一件事是node -v
和nvm current
不一定报告相同的版本。
我想知道nvm current
会不会为你报告v9.3?
啊,是的,在我的机器上,我可以在与node -v
报告不同的位置全局安装松露
> 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
命令
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.