fnm 是什么
fnm 是一个轻量、启动快、跨平台的 Node.js 版本管理工具。
如果你经常在这些场景之间切换,fnm 会很顺手:
- 老项目还在 Node 18
- 新项目已经切到 Node 22
- 一台机器上要同时维护多个前端、服务端和脚手架项目
对现在的 Node.js 开发来说,我更推荐这套组合:
fnm负责切换 Node 版本corepack负责管理pnpm、yarn等包管理器入口- 项目根目录放一个
.node-version,进入目录自动切版本
为什么值得用
- 启动快,比很多传统版本管理工具更轻
- 配置简单,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,后面可以直接继续。没有安装的话,按官网方式装即可。
Windows 环境设置
Windows 下最关键的一步,是让 PowerShell 在启动时自动注入 fnm 环境。否则你虽然装了 Node,但新开终端时可能找不到对应的 node、npm。
先创建 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-versionpackage.json- 明确的
scripts.dev、scripts.build - 如果使用
pnpm,加上packageManager
一个简单例子:
{
"packageManager": "pnpm@10.8.0",
"scripts": {
"dev": "vite",
"build": "vite build"
}
}
总结
如果你现在还在手动切 Node 版本,或者每次开新项目都要重新配环境,那 fnm 很值得装。
它最实用的点不是“能管理版本”,而是这几个体验一起叠加后非常省事:
- 快速切换多个 Node 版本
- 进入目录自动生效
- 配合
corepack和项目脚本使用很顺 - 非常适合现代 Node.js 开发流
对个人开发和团队协作来说,这套方式都足够轻,也足够稳定。