1. 为什么选择NVM安装Node.js
在Ubuntu上安装Node.js有多种方式,包括直接使用apt安装、从官网下载二进制包、使用NVM(Node Version Manager)等。经过多年实践,我强烈推荐使用NVM来管理Node.js环境,原因如下:
多版本共存:NVM允许你在同一台机器上安装和切换多个Node.js版本,这对需要同时维护多个项目的开发者特别有用。比如项目A需要Node.js 14,项目B需要Node.js 18,NVM可以轻松应对这种场景。
权限问题规避:直接通过apt安装的Node.js通常需要sudo权限来全局安装npm包,这既不安全也不方便。NVM将Node.js安装在用户目录下,完全避免了权限问题。
更新便捷:当新版本Node.js发布时,通过NVM升级只需一条命令,比重新下载安装包或修改apt源要简单得多。
环境隔离:每个项目可以使用独立的Node.js版本,不会相互干扰,这对团队协作特别重要。
提示:虽然Ubuntu官方仓库也提供Node.js,但版本通常较旧,且与npm的兼容性可能存在问题。除非有特殊需求,否则不建议使用apt安装。
2. 安装前的准备工作
2.1 系统要求检查
在开始安装前,请确保你的Ubuntu系统满足以下要求:
- Ubuntu 18.04 LTS或更高版本(推荐20.04/22.04 LTS)
- 至少1GB可用磁盘空间
- 稳定的网络连接
- 已安装curl或wget工具
可以通过以下命令检查系统信息:
lsb_release -a # 查看Ubuntu版本 df -h / # 查看磁盘空间 curl --version # 检查curl是否安装2.2 清理旧版本Node.js(如有)
如果你之前通过其他方式安装过Node.js,建议先彻底卸载以避免冲突:
sudo apt remove --purge nodejs npm sudo rm -rf /usr/local/bin/npm /usr/local/bin/node sudo rm -rf /usr/local/lib/node_modules rm -rf ~/.npm ~/.node-gyp3. 使用NVM安装Node.js
3.1 安装NVM
NVM的安装非常简单,只需执行以下命令:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash安装完成后,需要重新加载shell配置或打开新的终端窗口。如果不想重启终端,可以手动加载:
source ~/.bashrc验证NVM是否安装成功:
nvm --version3.2 安装指定版本Node.js
NVM支持安装任意版本的Node.js。以下是常用命令:
nvm install 24 # 安装最新的Node.js 24.x nvm install 20 # 安装最新的Node.js 20.x nvm install 18 # 安装最新的Node.js 18.x nvm install --lts # 安装最新的LTS版本安装完成后,可以列出所有已安装的版本:
nvm ls3.3 设置默认Node.js版本
为了避免每次新开终端都需要切换版本,可以设置默认版本:
nvm alias default 243.4 验证安装
安装完成后,验证Node.js和npm版本:
node -v # 应该输出类似v24.14.0 npm -v # 应该输出类似11.9.04. 使用Docker方式安装Node.js
对于需要隔离环境或快速测试的场景,Docker是一个很好的选择。
4.1 安装Docker
如果尚未安装Docker,可以执行:
sudo apt update sudo apt install docker.io sudo systemctl enable --now docker sudo usermod -aG docker $USER注意:执行usermod后需要注销并重新登录才能生效。
4.2 运行Node.js容器
拉取官方Node.js镜像并运行:
docker pull node:24-alpine docker run -it --rm --entrypoint sh node:24-alpine在容器内验证版本:
node -v npm -v4.3 持久化项目目录
对于实际开发,建议将本地项目目录挂载到容器中:
docker run -it --rm -v $(pwd):/app -w /app node:24-alpine5. 常见问题与解决方案
5.1 NVM命令找不到
如果遇到"nvm: command not found",可能是shell配置未加载。解决方法:
source ~/.bashrc # 或者 source ~/.zshrc如果问题依旧,检查~/.bashrc或~/.zshrc是否包含以下内容:
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"5.2 npm权限问题
使用NVM安装的Node.js不会出现全局权限问题。如果遇到EACCES错误,可以:
mkdir ~/.npm-global npm config set prefix '~/.npm-global' echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc source ~/.bashrc5.3 网络连接问题
在国内可能会遇到下载慢的问题,可以设置淘宝镜像:
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node nvm install 24 # 设置npm镜像 npm config set registry https://registry.npmmirror.com6. 性能优化与最佳实践
6.1 选择合适的Node.js版本
- 生产环境建议使用LTS版本(偶数版本号)
- 开发环境可以尝试最新版以获得新特性
- 旧项目保持原有版本以确保兼容性
6.2 管理全局npm包
建议将全局安装的包数量保持在最低限度。常用开发工具可以安装为全局包:
npm install -g yarn pnpm nodemon typescript6.3 项目特定配置
每个Node.js项目应该:
- 在项目根目录创建.nvmrc文件指定Node.js版本
- 使用package-lock.json或yarn.lock锁定依赖版本
- 将node_modules添加到.gitignore
示例.nvmrc内容:
246.4 资源监控
Node.js应用运行时可以监控其资源使用情况:
# 查看Node.js进程 ps aux | grep node # 监控内存使用 node -e "console.log(process.memoryUsage())"7. 进阶配置与调优
7.1 调整npm配置
优化npm性能和安全性的配置:
# 设置超时和重试 npm config set fetch-retries 3 npm config set fetch-retry-mintimeout 10000 # 禁用不安全操作 npm config set ignore-scripts false # 查看完整配置 npm config list7.2 使用pnpm替代npm
pnpm是更高效的包管理工具,可以节省磁盘空间:
npm install -g pnpm pnpm setup7.3 Node.js性能调优
根据应用类型调整Node.js参数:
# 增加内存限制 node --max-old-space-size=4096 app.js # 启用更快的V8优化 node --turbo app.js8. 开发环境集成
8.1 VS Code配置
在VS Code中实现更好的Node.js开发体验:
- 安装ESLint、Prettier扩展
- 配置调试启动文件(launch.json)
- 启用自动补全和类型检查
8.2 调试技巧
使用内置调试器或Chrome DevTools:
node inspect app.js # 或 node --inspect app.js8.3 测试环境配置
建议配置单元测试和集成测试:
npm install -D jest mocha chai示例测试脚本:
// test.js const assert = require('assert'); describe('Array', () => { describe('#indexOf()', () => { it('should return -1 when the value is not present', () => { assert.equal([1,2,3].indexOf(4), -1); }); }); });9. 生产环境部署建议
9.1 使用进程管理器
推荐使用PM2管理Node.js应用:
npm install -g pm2 pm2 start app.js pm2 save pm2 startup9.2 日志管理
配置合理的日志轮转:
pm2 install pm2-logrotate pm2 set pm2-logrotate:max_size 10M pm2 set pm2-logrotate:retain 309.3 安全加固
生产环境安全建议:
- 使用helmet中间件
- 限制请求体大小
- 禁用X-Powered-By头
- 定期更新依赖
const helmet = require('helmet'); app.use(helmet());10. 版本升级策略
10.1 测试升级兼容性
使用nvm测试新版本:
nvm install 25 nvm use 25 npm test10.2 渐进式升级路径
推荐升级路径:
- 开发环境先行
- 预发布环境验证
- 生产环境分批部署
10.3 回滚方案
确保有可靠的回滚机制:
nvm use 24 pm2 restart all