在 Ubuntu 上做 Node.js 开发,真正容易出问题的通常不是“能不能装上”,而是后续要不要切版本、会不会碰到 npm 权限、开发和生产各该怎么启动。下面按“安装方式选择 → 开发环境补齐 → 项目跑起来 → 后续维护”这条线整理一遍,读完后你可以判断自己更适合用 NVM、NodeSource 还是 APT,也能直接把一个 Node.js 项目在本机跑通。
选择合适的 Node.js 安装方式
Ubuntu 上安装 Node.js 常见有三种方法:NVM、NodeSource PPA 和系统自带 APT。它们都能完成安装,但适用场景并不一样。

用 NVM 安装:适合日常开发
如果你需要在不同项目之间切换 Node.js 版本,NVM(Node Version Manager)通常是最稳妥的选择。它的优势不只是安装方便,更重要的是可以同时管理多个版本,切换时不必反复卸载重装。
先执行安装命令,并重新加载终端配置:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
source ~/.bashrc
安装完成后,可以直接装最新 LTS 版本,或者指定固定版本:
nvm install --lts # 安装最新LTS版本(如v18.x)
nvm install 16.14.0 # 安装特定版本(如v16.x)
最后确认 Node.js 和 npm 是否可用:
node -v # 输出Node.js版本(如v18.12.1)
npm -v # 输出npm版本(如9.6.7)
如果你的机器会长期用于多个 Node.js 项目开发,NVM 基本可以作为默认方案。
用 NodeSource PPA 安装:适合固定较新版本
有些项目不需要频繁切版本,但希望系统里直接安装一个较新的 Node.js 版本,这时可以考虑 NodeSource PPA。它的安装流程更接近系统包管理,适合单一版本的开发环境或部署环境。
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
# 将18.x替换为你需要的版本
sudo apt install -y nodejs
安装后同样可以用 node -v 和 npm -v 验证版本。
这类方式的优点是直接、清晰,缺点是后续若要并行维护多个版本,不如 NVM 灵活。
用 APT 安装:适合临时测试
如果你只是想快速装一个可用环境,APT 的确最省事,但它通常不是正式开发的首选。原因很简单:Ubuntu 软件仓库里的 Node.js 版本往往偏旧,例如文中提到的 v14.x。
sudo apt update
sudo apt install nodejs npm
node -v # 通常是较旧版本(如v14.x)
因此,APT 更适合短期测试、临时验证命令,或者对版本要求不高的场景。只要项目依赖较新生态,还是优先考虑 NVM 或 NodeSource。
把开发环境一次配齐
Node.js 本体装好之后,真正影响开发效率的是编辑器、常用工具和 npm 的权限配置。这里建议把常见环节一次补齐,避免后面边写边修环境。
编辑器与 IDE 选择
在 Ubuntu 上做 Node.js 开发,Visual Studio Code 依然是最常见的选择。它对 JavaScript、Node.js 调试、Git 和扩展生态的支持都比较完整,适合作为主力开发工具。
sudo snap install --classic code
如果你只是希望快速开始,本机先装好 VS Code,已经足够覆盖大多数 Node.js 项目的日常开发需求。
常用全局工具:nodemon 与 pm2
Node.js 开发环境里,比较常见的两个全局工具是 nodemon 和 pm2,但它们解决的是不同问题。
nodemon 适合开发阶段。它会在文件变更后自动重启应用,省去手动停止再运行的过程:
npm install -g nodemon
pm2 更偏向运行管理,常用于后台运行、保活和查看状态:
npm install -g pm2
前者提升本地调试效率,后者更适合把服务稳定挂起来。两个工具并不冲突,通常可以同时安装。
可选:调整 npm 全局安装路径
不少人在 Ubuntu 上安装全局 npm 包时会遇到权限问题。一个常见处理办法,是把全局模块路径改到当前用户目录下,这样能减少对 sudo 的依赖。
mkdir ~/.npm-global # 创建全局目录
npm config set prefix '~/.npm-global' # 设置全局路径
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc # 添加到PATH
source ~/.bashrc # 重新加载配置
这一步不是必须项,但如果你后面经常安装全局工具,提早配置会省掉不少权限相关的小问题。
创建并运行第一个 Node.js 项目
环境准备完成后,下一步就是把一个最基础的项目真正跑起来。只要能完成初始化、装依赖、写示例代码并启动服务,整个开发链路就算打通了。

初始化项目目录和 package.json
先创建项目目录并进入其中:
mkdir my-node-app && cd my-node-app
然后初始化 package.json,用于记录依赖与项目配置:
npm init -y # 自动生成默认配置
这一步完成后,你已经有了一个标准 Node.js 项目的基本骨架。
安装项目依赖与开发依赖
接着安装业务依赖,例如文中的 Express,以及其他常用库:
npm install express # 安装Express
npm install lodash # 安装其他依赖
如果还要加上代码检查工具之类的开发依赖,可以执行:
npm install eslint --sa ve-dev
这里原文命令保持不变。实际操作时,你也可以在执行后检查 package.json 中依赖是否被正确写入。
编写一个最小可运行示例
创建 index.js 文件,写入一个最简单的 HTTP 服务:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello from Node.js on Ubuntu!');
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
这段代码做的事情很直接:监听 3000 端口,并在访问根路径时返回一段文本。对于检查环境是否可用,它已经足够。
开发模式与生产模式怎么启动
本地开发时,可以直接用 nodemon 启动:
nodemon index.js
这样修改代码后服务会自动重启,更适合频繁调试。
如果你想让程序在后台持续运行,则可以使用 pm2:
pm2 start index.js --name "my-app" # 启动应用
pm2 list # 查看运行中的应用
pm2 logs # 查看日志
简单理解就是:开发阶段优先 nodemon,需要稳定运行和查看状态时再用 pm2。
后续维护:版本切换、npm 更新与卸载
Node.js 环境装好以后,真正长期使用时最常见的维护动作,通常就是切版本、升级 npm,以及清理不再需要的安装内容。
切换 Node.js 版本
如果你采用的是 NVM,那么版本切换会非常直接:
nvm use 16.14.0 # 切换到v16.14.0
nvm use --lts # 切换到最新LTS版本
这也是为什么很多开发者在 Ubuntu 上更偏向 NVM:面对不同项目依赖时,切换成本明显更低。
更新 npm
当你需要升级 npm 时,可以执行:
npm install -g npm@latest
更新 npm 往往能解决部分包管理体验问题,但在升级前,也应留意项目本身是否对 npm 或 Node.js 版本有明确要求。
删除 Node.js
卸载方式取决于你最初是怎么安装的。
如果是通过 APT 安装,可以这样移除:
sudo apt remove --purge nodejs npm
sudo apt autoremove
如果是通过 NVM 安装某个版本,则可以按版本卸载:
nvm uninstall 18.12.1 # 将版本号替换为目标版本
把安装方式和卸载方式对应起来处理,后续环境清理会更干净,也不容易留下混杂版本。
怎么选更省事
如果你主要在 Ubuntu 上做日常 Node.js 开发,并且项目版本不完全一致,优先选 NVM,后续维护最轻松;如果你只需要一个固定的较新版本,NodeSource PPA 更直接;APT 则更像临时方案。
在此基础上,再补上 VS Code、nodemon、pm2 和可选的 npm 全局路径配置,基本就能组成一套完整的 Ubuntu Node.js 开发环境。接下来无论是新建 Express 项目、跑本地服务,还是切换版本维护旧项目,都会顺手很多。







