如何安装最新版本的NodeJS和NPM?

我在https://nodejs.org/网站上注意到,Node目前的版本是0.12.0。
请问有人可以告诉我如何安装最新版本的Node和npm吗(请提供终端命令)?

1sudo apt-get install nodejs有什么问题吗? - AlikElzin-kilaka
21它安装的是1.10.0版本。 - siliconrockstar
6@siliconrockstar 实际上在我的14.04 LTS上安装了v0.10.25。 - Alessandro Cosentino
1在Ubuntu 16中使用sudo apt-get install nodejs-legacy - briankip
19个回答

全新安装

使用 NodeSource PPA。详细信息请参阅安装说明。首先,选择您需要的 Node.js 版本并添加相应的源:

v=8   # set to 4, 5, 6, ... as needed
curl -sL https://deb.nodesource.com/setup_$v.x | sudo -E bash -

然后安装Node.js包。

sudo apt-get install -y nodejs

P.S.: 服务器上必须安装curl软件包才能运行这些代码行。

升级

如果您已经安装了nodejs并且想要更新,那么首先删除当前安装,并使用上述脚本重新安装。

sudo apt-get purge nodejs npm

1NodeSource使用两个独立的PPA:一个用于0.10.X版本,另一个用于0.12.X版本。此外,它还包含最新的npm软件包。 - 23W
感谢您的回复23W,那么我该如何使用NodeSource安装最新稳定版0.12.4呢? - tonyf
@扁桃体 我已经添加了示例代码。 - 23W
完美地工作了。 - tonyf
11对我来说没用。在运行curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -之后安装了nodejs,结果却得到了v0.10版本。 - Daithí
我使用nodesource重新安装了,然后它就正常工作了!(先运行apt-get remove --purge nodejs npm,然后重新执行上述步骤) - Daithí
@Coombesy 请尝试阅读该链接上的脚本,并手动将链接添加到/etc/apt/sources.list.d/nodesource.list文件中。 - Ivan Anishchuk
发生了什么事情导致nodesource出现问题吗?网站和GitHub存储库看起来都正常,但是curl命令显示W: Failed to fetch https://deb.nodesource.com/setup_5.x/dists/wily/main/binary-amd64/Packages HttpError404 - Jorn
49以 root shell 的方式进行 curling 是非常错误的,有很多方面都是如此。 - Draco Ater
1这将安装它作为nodejs而不是node。您可以通过运行以下命令将其符号链接到nodesudo ln -s "$(which nodejs)" /usr/sbin/node - Eugene Kulabuhov
8Guss下面的回答应该是被接受的答案。这不是推荐的做法。 - Patrick Fabrizius
另一个正式的指南来源:https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions - AlikElzin-kilaka
这个想法太危险了。有太多的方式会出错;你绝对不应该将任意数据输入到根目录下的shell中。这样很容易危及你的系统安全。Guss的答案应该被接受。 - Keefer Rourke
1好的,但是最新版本的npm呢? - Alexander Mills
2@AlexanderMills 下面提供的答案(https://askubuntu.com/a/711976/389358)将为您提供来自NodeSource的最新版本的nodejs - 这个软件包也包含了最新版本的npm。 - Keefer Rourke
2对我来说,从某个可能被黑客攻击的网站下载一个bash脚本并以root权限运行它有点让人不爽。 - Bastian Voigt

一般来说,从 URL 加载任意数据到根 Shell 会话并不是一个好主意,我希望人们能停止将其作为解决方案不断推销——"请运行我发送给你的脚本,并且我们还可以顺便谈谈——我有一座桥可能你会感兴趣购买"。
作为替代方案,这是 "Ubuntu 的做法",您可以看到系统正在如何更新,以及知道哪些存储库和密钥被添加到您的系统配置中。
curl https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
sudo apt-add-repository "deb https://deb.nodesource.com/node_7.x $(lsb_release -sc) main"
sudo apt-get update
sudo apt-get install nodejs

这里是用“apt-key 不建议使用的方法”来完成同样的事情。
curl https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_7.x $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/nodejs.list
sudo apt update
sudo apt install nodejs

这是最新的(在撰写时)Nodejs版本7。其他版本也可以通过简单更改存储库URL来获取-请参阅nodesource.com文档以了解详细信息。

3我完全同意你的观点,但是将一个新的软件源添加到apt中,不就相当于运行一个未知的脚本吗?(尽管我理解其他答案中提到的脚本实际上是在添加该软件源) - Dan
19脚本自己添加了存储库,还做了谁知道的事情。现在可能完全无害,但谁知道未来的DNS劫持者或网站利用者会做什么呢?添加存储库与从互联网上运行脚本不同,因为它本身不会下载任何可执行代码或运行它 - 它只会在特定的apt-get install响应中这样做,该命令将验证软件包是否使用nodesource密钥签名 - 希望该密钥比nodesource域或网站更安全保存。APT安全性非常出色,并且有良好的记录。 - Guss
这些命令需要使用sudo,即使如此,我安装的是0.10.25版本的Node,而不是当前版本5.5.0。出现了Failed to fetch https://deb.nodesource.com/node_5.x/dists/utopic/main/binary-amd64/Packages HttpError404错误。 - Dan Dascalescu
1@Dan,看起来你正在使用不受Node Source支持的Ubuntu 15.04(utopic)版本,所以你只能从utopic的软件源中获取0.10版本。Node Source仅支持LTS版本和最新的非LTS版本。由于你没有使用LTS版本,当去年十月份最新版本发布时,你应该升级到最新版本。所以要么进行升级,要么通过更改$(lsb_release -c)的版本自动检测部分为其中一个受支持的版本,并承担相应的后果。 - Guss
这在尝试使您的开发环境可自动化配置时也非常有帮助。我不会使用curl命令来获取适当的ppa... 非常感谢! - Josh
好的回答,但是……桥在哪里? - Paul Draper
2@PaulDraper:问问nodesource吧,他们是那些卖了不属于自己的桥梁的人。我的apt-get解决方案才是真正可靠的。 - Guss
1太棒了的答案!如果还有其他人想知道的话,它对于较新的版本来说非常有效 - 例如:只需将_7_替换为_9_。 - Mihai Rotaru
还要考虑更改npm的文件夹,以避免在安装全局包时需要使用sudo命令:https://docs.npmjs.com/getting-started/fixing-npm-permissions#option-2-change-npms-default-directory-to-another-directory - Mihai Rotaru
哇,非常感谢!我在尝试将Node.js安装到根Shell时遇到了一个错误。只有您的方法对我有效!谢谢!;) - Victor

Node.js v4.x:

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs

# Using Debian, as root
curl -sL https://deb.nodesource.com/setup_4.x | bash -
apt-get install -y nodejs

源代码:https://github.com/nodesource/distributions#debinstall

13以 root shell 的方式进行 curling 是非常错误的,有很多方面都是如此。 - Draco Ater
1之后我需要运行 sudo apt-get install -y npm 来安装npm,但它可以正常工作。谢谢。 - ujjal das

如果您想在 npm 内部进行更新,可以使用 n 命令:
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
sudo npm install npm@latest

这将安装n包,您可以使用它来切换NodeJS版本并使用它。与替代方案NVM和命令选项的比较在SO。还有一篇博客文章

1我已经在以下链接添加了逐步说明:https://askubuntu.com/a/971612/52975 - Ciro Santilli OurBigBook.com
1我对npm和nvm还不是很熟悉;我正在尝试在python虚拟环境中安装npm;使用npm或nvm是否有影响?nvm install lts/carbon会为我安装npm和node。这与您分享的上述命令有何不同? - kRazzy R
@kRazzyR:你可以选择使用 nvm 或者 n 来更新 NodeJS 和 npm。无论哪种情况,你都可以使用 npm 来安装 Node 包。 - serv-inc

NVM(Node Version Manager)

https://github.com/creationix/nvm

NVM 会为您安装最新稳定的 Node.js 版本和 npm。
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | sh
source ~/.nvm/nvm.sh
nvm install --lts
nvm use --lts
npm --version

现在用一个虚拟包来测试一下:
npm install --global vaca
vaca

由于每个新的shell都需要进行源代码获取,安装脚本会在您的.barshrc文件末尾添加一些自动源代码获取的操作。这样做是有效的,但我更喜欢删除自动添加的操作并添加自己的操作:
f="$HOME/.nvm/nvm.sh"
if [ -r "$f" ]; then
  . "$f" &>'/dev/null'
  nvm use --lts &>'/dev/null'
fi

优点:
- 允许您使用多个版本的Node,无需sudo权限 - 类似于Ruby RVM和Python Virtualenv,在Ruby和Python社区被广泛认为是最佳实践 - 在可能的情况下下载预编译的二进制文件,如果不可能,则下载源代码并为您编译一个
我们可以轻松地切换Node版本:
nvm install 0.9.0
nvm install 0.9.9
nvm use 0.9.0
node --version
#v0.9.0
nvm use 0.9.9
node --version
#v0.9.9

你可以使用一个git跟踪的.nvmrc文件来指示给定项目所需的node版本:https://stackoverflow.com/questions/24869959/how-do-i-specify-a-local-version-of-node-for-a-project/54503474#54503474 有了这个设置,你可以得到例如:
which node

给出:

/home/ciro/.nvm/versions/node/v0.9.0/bin/node

并且:

which vaca

给:

/home/ciro/.nvm/versions/node/v0.9.0/bin/vaca

如果我们想要使用全局安装的模块:
npm link vaca
node -e 'console.log(require.resolve("vaca"))'

给出:
/home/ciro/.nvm/versions/node/v0.9.0/lib/node_modules/vaca/index.js
所以我们可以看到,一切都完全包含在特定的节点版本中。
在Ubuntu 17.10中进行了测试。

安装NPM,
sudo apt-get install npm

然后对于Node,
sudo npm cache clean -f
sudo npm install -g n
sudo n 0.xx.x  // here is the version what you want.. 

这个命令将根据您想要的版本安装Node。


对于版本5.x 根据PPA
apt-get remove --purge nodejs npm
curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
apt-get install nodejs

你可以按照以下指示非常容易地安装最新版本。
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
版本7.x是最新的node版本。
sudo apt-get install nodejs
上述命令将安装nodejs。
sudo apt-get install build-essential
这将安装nodejs正常运行所需的基本模块。
现在检查一下nodejs是否已经正确安装在你的电脑上。
nodejs -v
这将返回已安装的nodejs版本。
npm -v
这将返回已安装的npm版本。希望对你有所帮助...
来源:link将向你展示如何使用其他方法安装nodejs。

为什么要安装 build-essential - David Foerster
Nodejs 包含了 Nodejs 二进制文件以及 npm。然而,为了使一些 npm 包正常工作(例如那些需要从源代码构建的包),你需要安装 build-essentials 包。 - Jitendra Pawar

Node.js在目前所有支持的Ubuntu版本中都可以作为一个snap软件包使用。对于Node.js来说,开发者可以从当前支持的版本中选择一个,并直接从NodeSource获取定期的自动更新。目前可用的Node.js版本有6、8、9、10、11、13、14、15、16、17和18,Snap Store会在Node.js发布后的几小时或几分钟内进行更新。
Node可以通过一个简单的命令进行安装,例如:
sudo snap install node --classic --channel 11/stable 

节点快照可以通过命令node访问,例如:
$ node -v  
v11.5.0
最新版本的npm将作为节点快照的一部分安装。npm应该在节点repl之外的正常shell中运行。安装节点快照后,运行以下命令启用npm更新检查:
sudo chown -R $USER:$(id -gn $USER) /home/your-username/.config
在上述命令中,将your-username替换为您自己的用户名。然后运行npm -v检查npm的版本是否是最新的。例如,我检查了npm是否是最新的,使用命令npm list yarn检查已安装的名为yarn的软件包的版本,然后使用命令npm update yarn更新现有的yarn软件包到最新版本。
用户可以随时在不需要额外工具(如nvm,Node版本管理器)的情况下切换Node.js的版本,例如:
sudo snap refresh node --channel=11/stable

用户可以通过切换到最新的边缘频道来测试可以安装的最新版本的Node.js。
sudo snap switch node --edge

这种方法仅建议那些愿意参与测试和向上游报告错误的用户使用。

Node.js LTS 时间表

版本 状态 代号 初始发布日期 LTS开始日期 维护开始日期 维护结束日期
6.x EOL Boron 2016年4月26日 2016年10月18日 2018年4月30日 2019年4月30日
7.x EOL 2017年5月30日 2017年6月30日
8.x EOL Carbon 2016年10月25日 2017年10月31日 2019年1月1日 2019年12月31日
9.x EOL 2017年10月1日 2018年6月30日
10.x EOL Dubnium 2018年4月24日 2018年10月30日 2020年5月19日 2021年4月30日
11.x EOL 2018年10月23日 2019年6月1日
12.x Maintenance LTS Erbium 2019年4月23日 2019年10月21日 2020年11月301日 2022年4月30日
13.x EOL 2019年10月22日 2020年6月1日
14.x Maintenance LTS Fermium 2020年4月21日 2020年10月27日 2021年10月30日 2023年4月30日
16.x Active LTS Gallium 2021年4月20日 2021年10月26日 2022年10月18日 2024年4月30日
17.x Current 2021年10月19日 2022年4月1日 2022年6月1日
18.x Current 2022年4月19日 2022年10月25日 2023年10月18日 2025年4月30日