如何使用 nvm 正确升级节点

Posted

技术标签:

【中文标题】如何使用 nvm 正确升级节点【英文标题】:How to properly upgrade node using nvm 【发布时间】:2016-04-21 00:21:30 【问题描述】:

是否可以直接升级node,而不是手动安装最新的稳定版本?

我已经安装了node.js 版本5.0nvm,但现在我想将其更新为5.4。我试图避免手动重新安装我的所有全局包(例如通过运行npm install -g grunt-cli bower yo yoman-angular-generator blabla blablablabla...)。

【问题讨论】:

github.com/nvm-sh/nvm,安装最新版本的 NVM 会删除旧版本吗? @vikramvi 感谢您的评论;问题暗示使用 nvm 升级节点,而不是升级 nvm 本身 【参考方案1】:

这可能有效:

nvm install NEW_VERSION --reinstall-packages-from=OLD_VERSION

例如:

nvm install 6.7 --reinstall-packages-from=6.4

然后,如果需要,您可以使用以下命令删除以前的版本:

nvm uninstall OLD_VERSION

在您的情况下, 新版本 = 5.4 OLD_VERSION = 5.0

或者,尝试:

nvm install stable --reinstall-packages-from=current

【讨论】:

使用nvm install stable 删除所有已安装的软件包,包括已安装的节点而不是更新它们? 实际上,这不再有效。 npm 有问题:github.com/creationix/nvm/issues/811 通过nvm ls-remote,您可以查看所有版本。 这对我有用:nvm install node --reinstall-packages-from=$(nvm current)。这会将 Node.js 更新到最新版本,并从以前的版本重新安装 npm 全局包。 如果卸载失败,请使用nvm deactivate重试。【参考方案2】:

您可以更简单地运行以下命令之一:

最新版本

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

稳定 (LTS) 版本:(如果当前正在使用)

nvm install "lts/*" --reinstall-packages-from="$(nvm current)"

这将安装适当的版本并从当前使用的节点版本重新安装所有包。

这使您无需手动处理特定版本。


感谢 @m4js7er 对 LTS 版本的评论。

【讨论】:

如果你想更新到最新的稳定版本(lts - 推荐给大多数用户),那么你应该运行:nvm install lts/* --reinstall-packages-from=node。之后,您可以使用nvm uninstall [old version] 清理您的版本。您可以使用nvm ls列出所有已安装的版本。 三思而后行--reinstall-packages-from=node 您可以为版本 6、8 和 10 使用不同的全局环境。 我绑定了命令nvm install lts/* --reinstall-packages-from=node 但它给了我错误提示Version 'lts/*' not found - try 'nvm ls-remote' to browse available versions. 我使用的是NVM 版本0.30.1,可能我的NVM 太旧了。我最终手动将 lts/* 替换为 10.15.2/* 以使其正常工作。 这是用于始终保持更新的最佳和最简单的命令.. 如果您在 OSX 上使用默认 zsh shell 并获得 zsh: no matches found: lts/*,只需引用 lts/* 参数以防止 Z shell 将 * 解释为通配符:nvm install 'lts/*' --reinstall-packages-from=node【参考方案3】:

两个简单的解决方案:

要安装最新版本的 node 并重新安装旧版本的包,只需运行以下命令。

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

要安装最新的lts(长期支持)版本的节点并重新安装旧版本的包,只需运行以下命令。

nvm install --lts /* --reinstall-packages-from=node

这里有一个 GIF 动画来支持这个答案:

【讨论】:

无法正常工作 - 我只收到If --reinstall-packages-from is provided, it must point to an installed version of node. @wickywills "node: this installs the latest version of node" 也许你已经安装了 LTS 或特定版本,因此 node 没有指向安装的最新版本。或者你需要更新 nvm。 这对我有用,但是在安装并激活新节点后如何删除旧节点? 我知道这并不能完全回答您的问题,但我已经停止使用 nvm 转而使用名为 n 的极快且低调的脚本。我在上面制作了一个 10 分钟的视频——谈论我为什么搬到 n 以及如何使用它。该视频可在nodecli.com/nodejs-install-n 获得 不是重复现有的答案吗?并且gif动画让我阅读内容分散注意力,我冒昧地将其放入剧透中,以便在点击后变为可用,以便更容易阅读此页面上的内容。希望这会有所帮助。【参考方案4】:

如果你有 4.2 并且想安装 5.0.0 那么

nvm install v5.0.0 --reinstall-packages-from=4.2

gabrielperales 的答案是对的,只是他错过了末尾的“=”符号。如果您不输入“=”符号,则将安装新的节点版本,但不会安装软件包。

来源:sitepoint

【讨论】:

【参考方案5】:

Node.JS 安装新版本。

第 1 步:NVM 安装

npm i -g nvm

第 2 步:NODE 最新版本安装

nvm install *.*.*(NodeVersion)

第 3 步:选定的节点版本

nvm use *.*.*(NodeVersion)

完成

【讨论】:

目前当你使用 npm 安装 nvm 时,你会得到响应 npm WARN deprecated nvm@0.0.4: This is NOT the correct nvm. Visit http://nvm.sh and use the curl command to install it.【参考方案6】:

以下是适用于 Ubuntu 操作系统并使用 nvm

的步骤

去nodejs网站获取最新的LTS版本(例如版本为:x.y.z)

nvm install x.y.z
# In my case current version is: 14.15.4 (and had 14.15.3)

之后,执行nvm list,你会得到nvm安装的node版本列表。

现在你需要通过执行切换到默认的最后安装的一个:

nvm alias default x.y.z

再次列出或运行nvm --version 以检查:

更新:有时即使我执行了上述步骤,它也不起作用,所以我所做的是删除/usr/local/bin中的符号链接

cd /usr/local/bin
sudo rm node npm npx

然后重新链接:

sudo ln -s $(which node) /usr/local/bin/node
sudo ln -s $(which npm) /usr/local/bin/npm
sudo ln -s $(which npx) /usr/local/bin/npx

【讨论】:

【参考方案7】:

用于更新当前活动版本的 Bash 别名:

alias nodeupdate='nvm install $(nvm current | sed -rn "s/v([[:digit:]]+).*/\1/p") --reinstall-packages-from=$(nvm current)'

sed -rn "s/v([[:digit:]]+).*/\1/p" 部分转换来自nvm current 的输出,以便只返回节点的主要版本,即:v13.5.0 -> 13

【讨论】:

以上是关于如何使用 nvm 正确升级节点的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nvm 更改节点版本

如何升级nodejs

如何在带有 nvm 的 MacO 上使用 Husky 和 ​​SourceTree 修复这些错误? “在 PATH 中找不到节点”和“当前目录不是 git 目录!”

如何在 bash 脚本中调用“nvm use”,并在脚本执行后保留所选节点版本?

windows使用nvm安装nodejs后升级npm报错

使用 nvm 管理不同版本的 node 与 npm