Node.js入门教程(五):NVM 管理多版本 Node.js

一、为什么需要 nvm?

在日常开发中,我们经常会遇到需要切换 Node.js 版本的情况:

场景 说明
不同项目需求不同 项目 A 需要 Node.js 18,项目 B 需要 Node.js 16
兼容性测试 测试应用在不同 Node.js 版本下的运行情况
版本升级 方便升级到最新版本,同时保留旧版本以便回退
尝鲜新特性 使用 Current 版本体验新功能,不影响生产项目

nvm(Node Version Manager) 正是为了解决这些问题而生的工具,它可以让你在同一台机器上安装和管理多个 Node.js 版本,并在它们之间快速切换。

二、安装 nvm

在 macOS / Linux 上安装

使用 curl 安装:

复制代码
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

或使用 wget 安装:

复制代码
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

安装完成后,重新加载 shell 配置:

复制代码
# 如果使用 bash
source ~/.bashrc

# 如果使用 zsh
source ~/.zshrc

验证安装是否成功:

复制代码
nvm --version
# 输出类似:0.39.3

在 Windows 上安装(nvm-windows)

Windows 用户需要使用 nvm-windows(不同于 macOS/Linux 的 nvm):

  1. 访问 nvm-windows 发布页面:https://github.com/coreybutler/nvm-windows/releases

  2. 下载 nvm-setup.zip

  3. 解压并运行安装程序,按照向导完成安装

安装完成后,打开新的命令行窗口验证:

复制代码
nvm --version

三、nvm 常用命令

版本管理命令

命令 说明
nvm --version 查看 nvm 版本
nvm list-remote 列出所有可安装的 Node.js 版本(macOS/Linux)
nvm list available 列出可安装的 Node.js 版本(Windows)
nvm install <版本号> 安装指定版本
nvm install --lts 安装最新的 LTS 版本
nvm uninstall <版本号> 卸载指定版本

版本切换命令

命令 说明
nvm list 或 nvm ls 列出已安装的版本
nvm use <版本号> 切换到指定版本
nvm current 查看当前使用的版本
nvm alias default <版本号> 设置默认版本

四、实际使用示例

1. 查看可安装的版本

复制代码
# macOS/Linux
nvm list-remote
# 输出大量版本列表,如 v18.17.0, v20.10.0 等

# Windows
nvm list available

2. 安装特定版本

复制代码
# 安装 Node.js 18.17.0
nvm install 18.17.0

# 安装 Node.js 16.20.1
nvm install 16.20.1

# 安装最新的 LTS 版本
nvm install --lts

3. 列出已安装的版本

复制代码
nvm list

输出示例:

复制代码
->     v16.20.1
       v18.17.0
         system
default -> v16.20.1 (-> v16.20.1)

-> 表示当前正在使用的版本

4. 切换版本

复制代码
# 切换到 Node.js 18.17.0
nvm use 18.17.0

# 验证当前版本
node --version  # 输出:v18.17.0

# 切换到 Node.js 16.20.1
nvm use 16.20.1

# 验证当前版本
node --version  # 输出:v16.20.1

5. 查看当前使用的版本

复制代码
nvm current
# 输出类似:v18.17.0

6. 设置默认版本

每次打开新终端时,默认使用的版本:

复制代码
nvm alias default 18.17.0

7. 卸载版本

复制代码
nvm uninstall 16.20.1

五、项目级版本管理(.nvmrc)

nvm 支持通过 .nvmrc 文件为项目指定 Node.js 版本,实现自动切换。

创建 .nvmrc 文件

在项目根目录下创建 .nvmrc 文件,写入需要的版本号:

复制代码
# 在项目目录中
echo "18.17.0" > .nvmrc

使用 .nvmrc

进入项目目录后,执行 nvm use 会自动读取 .nvmrc 中的版本:

复制代码
cd my-project
nvm use
# 输出:Found '/my-project/.nvmrc' with version <18.17.0>
# 自动切换到 v18.17.0

六、不同项目使用不同版本

复制代码
# 项目 A 使用 Node.js 18
cd ~/projects/project-a
nvm use 18.17.0
node --version   # v18.17.0

# 项目 B 使用 Node.js 16
cd ~/projects/project-b
nvm use 16.20.1
node --version   # v16.20.1

这样在不同的项目目录之间切换时,可以快速切换到对应的 Node.js 版本。

七、验证安装是否成功

1. 检查 nvm 版本

复制代码
nvm --version

2. 创建测试程序

创建一个名为 hello.js 的文件:

复制代码
// hello.js
console.log('Hello, Node.js!');
console.log('Node.js 版本:', process.version);
console.log('当前工作目录:', process.cwd());
console.log('操作系统:', process.platform);

运行测试:

复制代码
node hello.js

预期输出(版本号取决于当前使用的版本):

复制代码
Hello, Node.js!
Node.js 版本: v18.17.0
当前工作目录: /Users/username/projects
操作系统: darwin

3. 检查全局安装路径

复制代码
# 查看 npm 全局包安装路径
npm config get prefix

# 查看 npm 配置
npm config list

# 查看 Node.js 安装路径(macOS/Linux)
which node

# 查看 Node.js 安装路径(Windows)
where node

八、本章小结

知识点 说明
nvm 是什么 Node Version Manager,用于管理多个 Node.js 版本
安装方式 macOS/Linux 用 curl/wget;Windows 用 nvm-windows
常用命令 nvm install、nvm use、nvm list、nvm alias
项目配置 使用 .nvmrc 文件为项目指定版本
默认版本 nvm alias default 设置默认使用的版本
多项目切换 不同项目目录使用不同 Node.js 版本

提示 :养成在项目根目录放置 .nvmrc 文件的习惯,团队成员也能自动使用正确的 Node.js 版本。

相关推荐
YIAN9 小时前
RAG 学到最后,我真正学会的不是“检索”,而是让系统知道自己缺什么
langchain·node.js·llm
用户11977079480739 小时前
GitHub 电商开源项目分享:用 sharp 批量出饰品主图,试了裁剪、细节图和色彩配置文件三个坑
前端·node.js
donecoding9 小时前
pnpm 配好了,为什么执行的还是另一份?命令入口与运行时排查
node.js·前端工程化
江屿风9 小时前
【Plain Language Large Model】【从浏览器到全栈:一课精通Node.js三剑客】流食般投喂
笔记·前端框架·npm·node.js·js·npx
SomeOtherTime13 小时前
node.js基础(AI回答)
node.js
雨季mo浅忆1 天前
记录Node.js安全漏洞及其内置Brotli解码器问题
node.js·安全性测试
tommyjiatong1 天前
资安底座连环雷:从 PHP2Shell 到 Node2Shell
node.js·php
SEO_juper1 天前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash
SEO_juper2 天前
Go 站点地图生成器:从首页爬全站,一键生成 sitemap.xml
xml·开发语言·人工智能·golang·node.js·seo·外贸独立站
Moshow郑锴2 天前
Ansible 批量部署 Node.js 服务:ZIP 直解与共享目录分发两种方案对比
node.js·ansible