脚本专家 发表于 2026-6-13 09:00:03

Windows下fnm管理Node.js版本的安装与PowerShell配置

在Windows环境下开发Node.js项目时,经常需要切换不同的Node版本以适应不同项目的依赖需求。fnm(Fast Node Manager)是一个跨平台的Node版本管理工具,相比nvm-windows,它基于Rust实现,速度更快,尤其适合在PowerShell中使用。下面详细介绍fnm在Windows上的安装、PowerShell环境配置以及常用操作。

一、安装fnm

使用Windows自带的包管理器Winget即可安装:


winget install Schniz.fnm


安装完成后,fnm的可执行文件已存在于系统路径中,但尚未与Shell环境绑定,需要手动配置PowerShell以在打开终端时自动加载fnm的环境变量。

二、配置PowerShell

1. 允许执行脚本

默认情况下,PowerShell的执行策略可能限制脚本运行。执行以下命令将当前用户的执行策略设为RemoteSigned(允许执行本地脚本和已签名的远程脚本):


Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser


如果你使用的是管理员权限的PowerShell,也可以直接设置,但通常当前用户级别已足够。

2. 编辑PowerShell配置文件(Profile)

每次打开PowerShell时自动加载fnm环境,需要在Profile文件中添加一行命令。

首先,在PowerShell中运行以下命令以创建或打开Profile文件:


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


该命令会检测Profile文件是否存在,不存在则新建,然后用记事本打开。

在文件末尾添加下面这一行:


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


各参数说明:
- --use-on-cd:当使用
cd
切换到包含.node-version或.nvmrc文件的目录时,自动切换Node版本。
- --shell powershell:指定输出适合PowerShell的环境变量设置脚本。
- --resolve-engines:使fnm能够解析项目中的package.json中engines.node字段,将其视为有效版本约束。

保存文件后,关闭所有PowerShell窗口并重新打开,或者执行以下命令使配置立即生效:


. $PROFILE


三、fnm常用命令:安装与切换Node版本

配置完成后,即可使用以下命令管理Node版本。

1. 安装指定版本


fnm install 18.20.4


安装最新的LTS版本:


fnm install --lts


2. 切换版本(当前Shell会话生效)


fnm use 18.20.4


此命令只在当前命令行窗口有效,关闭后恢复为默认版本。

3. 查看当前版本


fnm current


4. 列出已安装版本


fnm ls


5. 列出可安装的远程版本


fnm ls-remote


6. 设置默认版本


fnm default 22.13.1


设置后,所有新建的Shell窗口都将默认使用该版本。

7. 项目自动切换版本

在项目根目录下创建.node-version文件(也支持.nvmrc),内容直接写入版本号,例如:


v18.20.4


之后每次进入该目录时,由于在Profile中配置了--use-on-cd,fnm会自动切换到与项目匹配的Node版本(需要确保该版本已安装)。

四、注意事项与扩展

- 如果使用
fnm use
后仍然出现版本不对,请检查PowerShell的执行策略以及Profile文件是否成功加载。
- 在Windows上,fnm会将安装的Node版本默认存储于
%LOCALAPPDATA%\fnm\
目录下。
- 更多高级配置可参考fnm官方文档:github.com/Schniz/fnm。

通过fnm + PowerShell配置,你可以像在Linux下使用nvm一样丝滑地在Windows上管理多个Node版本,尤其适合需要频繁切换Node版本的开发场景。

热心网友6 发表于 2026-6-13 09:10:00

Re: Windows下fnm管理Node.js版本的安装与PowerShell配置

感谢分享,非常实用的教程!之前用nvm-windows总觉得切换速度有点慢,fnm的Rust实现确实快很多。你提到的`--resolve-engines`参数我还没用过,原来可以直接解析package.json里的engines字段,这个很赞,省得每个项目都手动建.node-version文件了。另外Profile文件配置那一步,对于新手来说可能“允许执行脚本”和编辑Profile容易被忽略,你写得很清楚。收藏了,以后推荐给同事用。

热心网友5 发表于 2026-6-17 21:20:01

Re: Windows下fnm管理Node.js版本的安装与PowerShell配置

感谢楼主分享这么详细的教程!之前用 nvm-windows 总觉得切换速度有点慢,尤其是每次打开新的终端都要等一会儿。fnm 基于 Rust 实现确实快很多,而且 PowerShell 配置那一步写得特别清楚,尤其是 `--resolve-engines` 参数的解释和 `.node-version` 文件自动切换的功能,很实用。我按你的步骤设置完后,`fnm ls` 和 `fnm use` 基本秒切,体验提升很明显。有个小问题想请教:如果同时有 `.node-version` 和 `.nvmrc` 文件,fnm 会优先读取哪个?或者都能识别吗?再次感谢你的分享!

热心网友4 发表于 2026-6-18 15:40:01

Re: Windows下fnm管理Node.js版本的安装与PowerShell配置

感谢楼主分享这么详细的教程!之前用nvm-windows偶尔遇到切换速度慢的问题,正好试试fnm。尤其是PowerShell配置那部分,很多新手容易卡在Profile文件创建和执行策略上,你一步步写得很清楚,跟着操作应该不会出错。有个小补充:如果winget找不到包,可以先检查一下系统更新,或者直接从GitHub Releases下载exe手动安装,效果一样。另外,`--resolve-engines`这个参数在项目里直接读package.json的engines字段确实很实用,省去了手动创建`.node-version`的步骤。再次感谢!
页: [1]
查看完整版本: Windows下fnm管理Node.js版本的安装与PowerShell配置