nodejs-fnm

fnm 是什么

fnm 是一个轻量、启动快、跨平台的 Node.js 版本管理工具。

如果你经常在这些场景之间切换,fnm 会很顺手:

  • 老项目还在 Node 18
  • 新项目已经切到 Node 22
  • 一台机器上要同时维护多个前端、服务端和脚手架项目

对现在的 Node.js 开发来说,我更推荐这套组合:

  • fnm 负责切换 Node 版本
  • corepack 负责管理 pnpmyarn 等包管理器入口
  • 项目根目录放一个 .node-version,进入目录自动切版本

fnm + modern Node.js workflow

为什么值得用

  • 启动快,比很多传统版本管理工具更轻
  • 配置简单,Windows / macOS / Linux 都能用
  • 支持进入项目目录后自动切换 Node 版本
  • 很适合现代前端项目、SSR 项目和脚手架开发

工作流图

下面这套流程基本就是我现在推荐的 Node.js 本地开发方式:

flowchart LR
		A[安装 fnm] --> B[安装 Node LTS]
		B --> C[设置默认版本]
		C --> D[PowerShell 注入 fnm env]
		D --> E[项目内写入 .node-version]
		E --> F[cd 进入项目]
		F --> G[自动切换到项目 Node 版本]
		G --> H[corepack 管理 pnpm/yarn]
		H --> I[pnpm dev / npm run dev 一键启动]

下载 fnm

官方文档:

开发文档 | fnm 中文网

如果你已经装好了 fnm,后面可以直接继续。没有安装的话,按官网方式装即可。

Windows 环境设置

Windows 下最关键的一步,是让 PowerShell 在启动时自动注入 fnm 环境。否则你虽然装了 Node,但新开终端时可能找不到对应的 nodenpm

先创建 PowerShell 配置文件:

if (-not (Test-Path $PROFILE)) { New-Item -Path $PROFILE -ItemType File -Force }

打开配置文件:

Invoke-Item $PROFILE

把下面这行加到配置文件末尾:

fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression

这一行的作用很直接:

  • 打开终端时自动加载 fnm
  • 进入不同项目目录时自动切换 Node 版本

配置完成后,重开一个 PowerShell 窗口。

一次性初始化 Node 环境

装好 fnm 后,建议先把本机默认开发环境初始化成 LTS。

fnm install --lts
fnm default lts-latest
node -v
npm -v

如果你平时主要是新项目开发,这一步基本够用了。

现代 Node.js 开发推荐姿势

1. 给项目固定 Node 版本

在项目根目录创建 .node-version 文件,例如:

22

这样你每次 cd 进入项目目录时,fnm 都会自动切到 Node 22。

这个方式比靠脑子记项目版本稳定得多,团队协作也更省心。

2. 开启 corepack

现代 Node.js 项目通常不建议全局到处安装包管理器,而是优先使用 corepack

corepack enable

如果项目里写了 packageManager 字段,例如:

{
	"packageManager": "pnpm@10.8.0"
}

那么团队里的包管理器版本会更统一。

3. 新项目直接起步

以 Vite + TypeScript 为例:

fnm use 22
corepack enable
npm create vite@latest my-app -- --template react-ts
cd my-app
npm install
npm run dev

如果你团队统一用 pnpm,那就把最后两步换成:

pnpm install
pnpm dev

我常用的 fnm 命令

安装指定版本

fnm install 22

使用指定版本

fnm use 22

设置默认版本

fnm default 22

查看当前版本

fnm current

查看本机已安装版本

fnm list

一键启动已有项目

如果项目已经有 package.json.node-version,那日常启动可以非常简单:

cd your-project
corepack enable
pnpm install 
# npm install
pnpm run dev
# npm run dev

如果依赖已经安装过,通常就只剩:

cd your-project
pnpm run dev
# npm run dev

因为这时候:

  • fnm 会自动切 Node 版本
  • scripts.dev 负责真正启动项目

也就是说,真正做到日常开发接近“一键启动”。

推荐的项目约定

想把体验做顺,建议每个 Node 项目至少放这几样:

  • .node-version
  • package.json
  • 明确的 scripts.devscripts.build
  • 如果使用 pnpm,加上 packageManager

一个简单例子:

{
	"packageManager": "pnpm@10.8.0",
	"scripts": {
		"dev": "vite",
		"build": "vite build"
	}
}

总结

如果你现在还在手动切 Node 版本,或者每次开新项目都要重新配环境,那 fnm 很值得装。

它最实用的点不是“能管理版本”,而是这几个体验一起叠加后非常省事:

  • 快速切换多个 Node 版本
  • 进入目录自动生效
  • 配合 corepack 和项目脚本使用很顺
  • 非常适合现代 Node.js 开发流

对个人开发和团队协作来说,这套方式都足够轻,也足够稳定。

github