通过 nvm 升级了节点和 npm,但旧节点仍然用于全局包
Upgraded node and npm via nvm, but old node is still used for global packages
我已经使用 node 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
环境变量没有结果。
到目前为止我做了什么:
- 删除节点 9.3.0
nvm uninstall 9.3.0
- 删除并重新启动计算机后重新安装 nvm
nvm reinstall-with-packages
- 已删除
~/.nvmrc
并在之后设置 10.12.0
- 检查我是否有来自自制软件的重叠节点,但我没有
可能是什么问题?
看来您可能需要 运行 nvm reinstall-packages
https://github.com/creationix/nvm#migrating-global-packages-while-installing
这表示
Migrating global packages while installing
If you want to install a new version of Node.js and migrate npm packages from a previous version:
nvm install node --reinstall-packages-from=node
This will first use "nvm version node" to identify the current version you're migrating packages from. Then it resolves the new version to install from the remote server and installs it. Lastly, it runs "nvm reinstall-packages" to reinstall the npm packages from your prior version of Node to the new one.
You can also install and migrate npm packages from specific versions of Node like this:
nvm install 6 --reinstall-packages-from=5
nvm install v4.2 --reinstall-packages-from=iojs
另一个"solution"就是不使用全局包。特别是在使用 nvm 并且无法确定全局包是否适用于 "current" 版本时,最好在本地安装并使用 npx
到 运行 本地命令
truffle 在你 npm install
时安装一个 truffle
命令到 ./node_modules/.bin 这样你就可以 npx truffle
到 运行 本地命令而不是 truffle
到 运行 全球
编辑:
另一件要检查的事情是 node -v
和 nvm current
不一定报告相同的版本。
不知道 nvm current
是否会为您报告 v9.3?
啊,是的,在我的机器上,我可以在与 node -v
报告
不同的位置全局安装 truffle
> 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
命令
经过几个小时痛苦的 Unix 调试,我意识到问题是我在 npm config
中设置了一个前缀:
prefix = "/Users/paulrberg/.nvm/versions/node/v9.3.0"
要解决此问题,请确保取消设置前缀:
npm config rm prefix
这是 mentioned,虽然不一定在 nvm 文档中闪耀
If you have an ~/.npmrc file, make sure it does not contain any prefix
settings (which is not compatible with nvm)
我认为支持文档中的 this section 是一个更永久的解决方案。
Default global packages from file while installing
If you have a list of default packages you want installed every time you install a new version, we support that too -- just add the package names, one per line, to the file $NVM_DIR/default-packages. You can add anything npm would accept as a package argument on the command line.
我已经使用 node 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
环境变量没有结果。
到目前为止我做了什么:
- 删除节点 9.3.0
nvm uninstall 9.3.0
- 删除并重新启动计算机后重新安装 nvm
nvm reinstall-with-packages
- 已删除
~/.nvmrc
并在之后设置10.12.0
- 检查我是否有来自自制软件的重叠节点,但我没有 可能是什么问题?
看来您可能需要 运行 nvm reinstall-packages
https://github.com/creationix/nvm#migrating-global-packages-while-installing
这表示
Migrating global packages while installing If you want to install a new version of Node.js and migrate npm packages from a previous version:
nvm install node --reinstall-packages-from=node
This will first use "nvm version node" to identify the current version you're migrating packages from. Then it resolves the new version to install from the remote server and installs it. Lastly, it runs "nvm reinstall-packages" to reinstall the npm packages from your prior version of Node to the new one.
You can also install and migrate npm packages from specific versions of Node like this:
nvm install 6 --reinstall-packages-from=5
nvm install v4.2 --reinstall-packages-from=iojs
另一个"solution"就是不使用全局包。特别是在使用 nvm 并且无法确定全局包是否适用于 "current" 版本时,最好在本地安装并使用 npx
到 运行 本地命令
truffle 在你 npm install
时安装一个 truffle
命令到 ./node_modules/.bin 这样你就可以 npx 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
命令
经过几个小时痛苦的 Unix 调试,我意识到问题是我在 npm config
中设置了一个前缀:
prefix = "/Users/paulrberg/.nvm/versions/node/v9.3.0"
要解决此问题,请确保取消设置前缀:
npm config rm prefix
这是 mentioned,虽然不一定在 nvm 文档中闪耀
If you have an ~/.npmrc file, make sure it does not contain any prefix settings (which is not compatible with nvm)
我认为支持文档中的 this section 是一个更永久的解决方案。
Default global packages from file while installing
If you have a list of default packages you want installed every time you install a new version, we support that too -- just add the package names, one per line, to the file $NVM_DIR/default-packages. You can add anything npm would accept as a package argument on the command line.