node 包管理工具 : nvm vs fvm

在 macOS 上管理 Node.js 版本,选择合适的工具至关重要。这不仅能让你在不同的项目中使用不同版本的 Node.js,还能避免权限问题,提升开发效率。

目前主流的工具有 nvm、fnm 和 Volta,它们各有侧重,你可以根据自己的需求来选择。

🧰 主流 Node 版本管理工具对比

表格

工具 核心特点 适用场景
nvm 社区最流行,资源最丰富,命令直观。 需要广泛社区支持和丰富教程的开发者。
fnm 基于 Rust 开发,速度极快,支持目录切换时自动切换版本。 追求极致性能和自动化体验的开发者。
Volta 将 Node 和包管理器版本写入 package.json,实现项目级环境自动切换。 团队协作,希望统一项目环境,避免"在我机器上是好的"问题。

下面为你详细介绍这三种工具的安装和使用方法。


1. NVM (Node Version Manager)

NVM 是目前最流行、最成熟的版本管理工具,拥有庞大的用户基础和丰富的文档。

安装

在终端执行以下命令进行安装:

bash

编辑

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

安装完成后,需要重启终端或执行 source ~/.zshrc 让配置生效。

常用命令

  • 安装指定版本 : nvm install 18.16.0
  • 切换版本 : nvm use 18.16.0
  • 查看已安装版本 : nvm list
  • 设置默认版本 : nvm alias default 18.16.0
  • 查看远程所有可用版本 : nvm list-remote

2. FNM (Fast Node Manager)

正如其名,fnm 的最大亮点就是快 。它由 Rust 编写,性能远超基于 Shell 脚本的 nvm。它还支持在进入项目目录时自动切换 Node 版本。

安装

bash

编辑

arduino 复制代码
1curl -fsSL https://fnm.vercel.app/install | bash

安装后,请根据终端提示配置环境变量。为了实现自动切换,需要在 ~/.zshrc 中添加 eval "$(fnm env --use-on-cd)"。

常用命令

  • 安装指定版本 : fnm install v20.10.0
  • 切换版本 : fnm use v20.10.0
  • 查看已安装版本 : fnm list
  • 设置默认版本 : fnm default v20.10.0

3. Volta

Volta 的理念非常独特,它将 Node.js 和包管理器(如 pnpm、yarn)的版本信息直接写入项目的 package.json 文件中。这意味着,任何安装了 Volta 的开发者,在进入项目目录时,都会自动切换到项目指定的环境,非常适合团队协作。

安装

bash

编辑

arduino 复制代码
1curl https://get.volta.sh | bash

常用命令

  • 安装 Node.js : volta install node@18

  • 为当前项目锁定版本:

    1. 进入你的项目目录。
    2. 执行 volta pin node@18。
    3. 你会发现 package.json 中多了一个 volta 字段,里面记录了锁定的版本。

💡 国内加速小贴士

由于网络原因,直接安装 Node.js 版本可能会很慢或失败。你可以配置镜像源来加速下载。

  • 对于 NVM:

    bash

    编辑

    arduino 复制代码
    1export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/

    建议将此行添加到 ~/.zshrc 文件中,使其永久生效。

  • 对于 FNM:

    bash

    编辑

    arduino 复制代码
    1export FNM_NODE_DIST_MIRROR=https://npmmirror.com/mirrors/node/

    同样,建议添加到 ~/.zshrc 文件中。

总结与建议

  • 追求稳定和丰富资源 :选择 NVM。
  • 追求极致速度和自动化 :选择 FNM。
  • 团队协作,统一环境 :选择 Volta。

重要提示:请避免同时使用多个版本管理工具,这可能会导致环境变量冲突,引发意想不到的问题。选择最适合你的一个即可。

相关推荐
Hone24 分钟前
juejin-skills 系列 ②:我把「看掘金热榜」也做成了 Agent 技能
开源·node.js·ai编程
w16637 小时前
零 Root 无 PC:我让 AI 在手机上把鸿蒙 HDC 协议的底裤扒了下来
node.js
严肃小白兔1 天前
TanStack Router 更新构建工具链:Node.js 兼容性、路由分割与前端工程实践
前端·node.js·状态模式
一缕82年的清风2 天前
用了 3 年 Notion 和 Obsidian 后,为什么我最终把所有身家搬到了思源笔记?
node.js
Dumbness2 天前
一份 JSON 生成增删改查接口,入参清洗漏了什么:Number(" ") 是 0,搜 100% 把 1000 元券也搜出来
node.js·express
FungLeo3 天前
成为全栈·基础补充·Node.js 运行时:事件循环与异步
javascript·node.js·事件循环·后端开发·异步编程·成为全栈
用户087308654874 天前
用 GUI 自动化写了一个群聊 AI:5 个真实事故,和 7 条让 AI 不像机器人的设计
node.js
Dumbness5 天前
毕设后台导出 CSV 的 4 个坑:date 字段漏了公式防护,搜索框输入 % 能扫全表
node.js·express
wno7047 天前
node.js中使用jquery
前端·node.js·jquery