1.为什么Linux上的安装方式不止一种
Linux发行版生态分散,Debian系用apt,RedHat系用dnf或yum,每个发行版的官方源里塞进去的Node.js版本参差不齐。Ubuntu默认源里的Node.js往往落后好几个大版本,CentOS则需要先启用EPEL才能装到可用的版本。
这就引出一个实际问题:装Node.js不是“一条命令走天下”的事,得先看清楚自己用的是什么发行版,以及项目对版本有没有硬性要求。
Linux是Node.js的核心支持平台之一。服务器端部署、容器化构建、CI流水线里跑的Node.js,绝大多数都落在Linux上。把这个环境搭对,后面的开发才不会反复出问题。
专业术语对照:
-
PPA(PersonalPackageArchive):Ubuntu的个人包档案,用于获取官方源之外的软件版本
-
NodeSource:提供预编译Node.js二进制包的第三方仓库
-
NVM(NodeVersionManager):Node.js版本管理器,支持多版本共存与切换
-
LTS(Long-TermSupport):长期支持版本,维护周期长,适合生产环境
2.先搞清楚三种安装方案的差异
动手之前,先把可选方案摆出来对比,选错了后面会折腾。
| 方案 | 适用发行版 | 版本新鲜度 | 多版本管理 | 适用场景 |
|---|---|---|---|---|
| 官方包管理器(apt/dnf/yum) | 全部 | 偏旧 | 不支持 | 快速搭建、对版本无特殊要求 |
| NodeSource仓库 | Debian/Ubuntu、RHEL/CentOS/Fedora | 较新 | 不支持 | 需要指定大版本(如18.x、20.x) |
| NVM | 全部 | 任意版本 | 支持 | 开发环境、需要切换版本的项目 |
我的经验判断:如果你只是想在服务器上跑一个固定的Node.js应用,用NodeSource装一个LTS版本就够了,省事。如果你本地开发需要同时维护多个项目,有的跑Node16,有的跑Node20,那NVM是唯一合理的选择。
包管理器直接装的Node.js版本固定,想换版本只能卸载重装,这在多项目并行时很要命。
3.Ubuntu/Debian系:apt+NodeSource安装
这是Ubuntu、Debian、LinuxMint等发行版的通用路径。
第一步:更新包索引
sudo apt update
第二步:注册NodeSource仓库
以LTS版本为例,执行:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
如果要指定大版本,比如Node20:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
这一步会下载并运行NodeSource的配置脚本,自动把仓库地址写入apt的源列表。
第三步:安装Node.js
sudo apt install -y nodejs
注意:通过NodeSource安装时,npm已经包含在nodejs包里,不需要单独执行aptinstallnpm。
第四步:验证
node -v
npm -v
两个命令都返回版本号,说明安装成功。
踩坑提醒:有些老教程会让你先装python-software-properties再add-apt-repositoryppa:chris-lea/node.js。这个PPA早已废弃,chris-lea的仓库多年不更新,里面的Node.js版本停留在0.10时代。别照着旧文章操作,用NodeSource的脚本代替。
4.CentOS/RHEL/Fedora系:dnf与NodeSourceRPM仓库
RedHat系发行版近年来的包管理器从yum迁移到了dnf,CentOSStream、RHEL8+、Fedora都推荐用dnf。
Fedora用户:
sudo dnf install nodejs npm
Fedora官方源里的Node.js版本更新相对及时,通常够用。
CentOS/RHEL用户:
先启用EPEL,再从EPEL装:
sudo dnf install epel-release
sudo dnf install nodejs npm
如果需要更新的大版本,用NodeSource的RPM源:
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo dnf install -y nodejs
个人建议:CentOS7已经停止维护,如果还在用这个版本,建议先考虑升级系统或者直接用NodeSource绕过系统源的限制。CentOS7的EPEL仓库里的Node.js版本停留在10.x级别,跑现在前端工具链会报语法错误。
5.NVM:多版本管理的实际用法
如果你的开发场景需要切换Node.js版本,NVM是更合适的方案。
安装NVM:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
安装脚本会把NVM的初始化代码写入~/.rc。执行以下命令让它立即生效:
source ~/.bashrc
安装Node.jsLTS版本:
nvm install --lts
安装指定版本:
nvm install 18.17.0
切换版本:
nvm use 18.17.0
查看已安装版本:
nvm list
设置默认版本:
nvm alias default 18.17.0
项目反思:我曾经在一个项目里本地用Node20开发,部署到服务器时发现服务器上装的是Node14。某个npm包在14上安装失败,因为它的engines字段要求>=16。如果用NVM管理本地版本,同时在服务器上也用NVM保持版本一致,这类问题可以在早期避免。
6.验证与PATH环境变量排查
安装完成后,node-v和npm-v应该正常输出。如果报commandnotfound,问题多半出在PATH上。
先确认命令实际路径:
which node
which npm
如果which也找不到,说明PATH里没有Node.js的安装目录。
查看当前PATH:
echo $PATH
输出是一串用冒号分隔的目录列表。NodeSource和apt安装的Node.js通常在/usr/bin下,这个目录默认就在PATH里,一般不需要手动配置。NVM安装的路径在~/.nvm/versions/node/<版本>/bin下,NVM的初始化脚本会自动处理。
手动添加PATH(临时方案):
export PATH=$PATH:/usr/local/nodejs/bin
长久生效:把export语句写入~/.rc,然后执行source~/.rc。
7.项目实例:用Express验证环境可用
装完之后,跑一个最小的HTTP服务,确认Node.js和npm都能正常工作。
第一步:创建项目目录
mkdir code号学习编程
cd code号学习编程
第二步:初始化项目并安装Express
npm init -y
npm install express
第三步:编写入口文件
新建code号学习编程.js:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Node.js 运行环境正常');
});
app.listen(3000, () => {
console.log('服务已启动:http://localhost:3000');
});
第四步:运行
node code号学习编程.js
终端输出服务已启动:http://localhost:3000后,用curl或浏览器访问本机3000端口,看到返回文本就说明整条链路都通了。这比只看版本号更能说明问题:npm能装包,Node.js能执行脚本,网络端口能正常监听。
8.权限问题与npm全局安装
用npminstall-g装全局包时,如果出现EACCES权限错误,说明npm试图往系统目录写文件。
不推荐的方案:sudonpminstall-g。这会把全局包的所有者变成root,后续用普通用户更新或卸载时会出现权限冲突。
推荐的方案:把npm全局目录改到用户目录下。
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
然后在~/.rc末尾追加:
export PATH=~/.npm-global/bin:$PATH
执行source~/.rc使配置生效。此后npminstall-g装的包都在用户目录下,不需要sudo。
9.本节课程知识要点
-
Ubuntu/Debian推荐用NodeSource仓库安装LTS版本,命令为
curl-fsSLhttps://deb.nodesource.com/setup_lts.x|sudo-E-加sudoaptinstallnodejs; -
CentOS/RHEL先启用EPEL,Fedora直接用dnf;
-
多版本切换需求用NVM,安装脚本为
curl-o-https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh|; -
验证用
node-v和npm-v,PATH问题用whichnode和echo$PATH排查; -
全局包权限问题用
npmconfigsetprefix解决,不用sudo; -
实际项目用Express跑一个端口监听,确认环境完整可用。
10.常见问题速查
Q:apt装的Node.js版本太旧,能直接升级吗?
A:不建议在apt版本之间来回折腾。要么添加NodeSource仓库后重装,要么用NVM管理版本。
Q:NVM和NodeSource能共存吗?
A:会冲突。NVM修改的是shell层面的PATH,优先级高于系统路径。如果两个都装了,node-v实际调用的可能是NVM管理的版本。确认方法:whichnode,看输出路径是不是~/.nvm/开头。
Q:sudoaptinstallnodejsnpm和只装nodejs有什么区别?
A:通过NodeSource安装时,npm已经在nodejs包里了,单独装npm反而可能从系统源拉取旧版本,造成版本混乱。
Q:LinuxMint用哪个方案?
A:Mint基于Ubuntu,直接按Ubuntu的NodeSource方式操作即可。