关于 fnm
fnm 是一个命令行工具,用于在同一台机器上管理多个 Node.js 版本。它可以安装最新 LTS 等版本,用一条命令切换当前版本,并列出本地已有的版本。fnm 以 Rust 编写,支持多个平台。
主要功能
- 01通过 fnm install --lts 安装最新的 LTS 版本
- 02通过 fnm use 24 切换当前 Node.js 版本
- 03通过 fnm list 查看已安装的版本
- 04可用 brew install fnm 经 Homebrew 安装
- 05作为可组合的命令行工具,便于接入 shell 脚本
适用场景
- 01运行构建前切换到项目要求的 Node.js 版本
- 02在多个 Node.js 版本上测试同一个软件包
- 03在新机器上搭建一致的 Node.js 环境
- 04让编码 Agent 在 shell 会话中切换 Node 版本
安装
选择你的系统或包管理器,复制命令到终端运行。
安装完成后运行fnm --version确认安装成功。
命令示例
常用命令按使用顺序排列。
详细介绍
Fast Node Manager (fnm)
🚀 快速、简单的 Node.js 版本管理器,使用 Rust 构建
功能
🌎 跨平台支持(macOS、Windows、Linux)
✨ 单文件,易于安装,启动迅速
🚀 专为速度而打造
📂 支持 .node-version 和 .nvmrc 文件
安装
使用脚本(macOS/Linux)
对于 bash、zsh 和 fish shell,我们提供了自动安装脚本。
首先确保操作系统上已安装 curl 和 unzip。然后执行:
curl -fsSL https://fnm.vercel.app/install | bash
升级
在 macOS 上,只需运行 brew upgrade fnm。
在其他操作系统上,升级 fnm 的方式与安装几乎相同。为避免在 shell 配置文件中重复添加内容,请在安装命令中传入 --skip-shell:
curl -fsSL https://fnm.vercel.app/install | bash -s -- --skip-shell
参数
--install-dir
设置 fnm 的自定义安装目录。默认值为 $XDG_DATA_HOME/fnm(如果未定义 $XDG_DATA_HOME,Linux 上会回退到 $HOME/.local/share/fnm,macOS 上则会回退到 $HOME/Library/Application Support/fnm)。
**注意:**在 macOS 上,只有使用
--force-install时此选项才有意义,因为默认安装方式是 Homebrew。
--skip-shell
跳过根据当前用户的 shell(由 $SHELL 定义)将对应的加载器追加到 shell 配置文件中。例如,Bash 对应 $HOME/.bashrc,Zsh 对应 $HOME/.zshrc,Fish 对应 $HOME/.config/fish/conf.d/fnm.fish。
--force-install
macOS 上使用安装脚本进行安装的方式已弃用,建议改用 Homebrew formula;此选项会强制脚本仍使用该方式进行安装。
示例:
curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "./.fnm" --skip-shell
手动安装
使用 Homebrew(macOS/Linux)
brew install fnm
使用 Winget(Windows)
winget install Schniz.fnm
使用 Scoop(Windows)
scoop install fnm
使用 Chocolatey(Windows)
choco install fnm
使用 Cargo(Linux/macOS/Windows)
cargo install fnm
使用发布的二进制文件(Linux/macOS/Windows)
- 为你的系统下载最新发布的二进制文件
- 将其添加到环境变量
PATH,使其全局可用 - 为 fnm 设置 shell
卸载
要移除 fnm(😢),只需删除主目录中的 .fnm 文件夹。你还应编辑 shell 配置,移除所有与 fnm 相关的内容(也就是阅读 Shell 设置,然后反向操作)。
补全
fnm 的二进制文件自带补全功能:
fnm completions --shell <SHELL>
<SHELL> 可以是以下受支持的 shell 之一:
bashzshfishpowershell
请按照对应 shell 的说明进行安装。
Shell 设置
开始使用 fnm 之前,需要先设置环境变量。
具体做法是对 fnm env 的输出进行求值。
提示
建议显式指定 shell(例如
fnm env --shell bash),而不是依赖运行时推断 shell。这样速度稍快,也能避免检测进程树。
说明
请查看配置部分,启用强烈 推荐的功能,例如自动切换版本。
只需在项目中添加 .node-version 文件即可:
$ node --version
v14.18.3
$ node --version > .node-version
请查看以下适用于你所用 shell 的指南:
Bash
将以下内容添加到 .bashrc 配置文件中:
eval "$(fnm env --use-on-cd --shell bash)"
Zsh
将以下内容添加到 .zshrc 配置文件中:
eval "$(fnm env --use-on-cd --shell zsh)"
Fish shell
创建 ~/.config/fish/conf.d/fnm.fish,并在其中添加以下这一行:
fnm env --use-on-cd --shell fish | source
PowerShell
将以下内容添加到配置文件末尾:
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
- 对于 macOS/Linux,配置文件位于
~/.config/powershell/Microsoft.PowerShell_profile.ps1 - 对于 Windows,位置可能是:
%userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1,适用于 Powershell 5%userprofile%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1,适用于 Powershell 6+
- 要创建配置文件,可以在 PowerShell 中运行:
if (-not (Test-Path $profile)) { New-Item $profile -Force } - 要编辑配置文件,可以在 PowerShell 中运行:
Invoke-Item $profile
Windows Command Prompt(又称 Batch、WinCMD)
fnm 也支持 Windows Command Prompt,但支持并不完整。你可以为 cmd.exe 或 Windows Terminal 设置启动脚本,并追加以下几行:
@echo off
:: for /F will launch a new instance of cmd so we create a guard to prevent an infnite loop
if not defined FNM_AUTORUN_GUARD (
set "FNM_AUTORUN_GUARD=AutorunGuard"
FOR /f "tokens=*" %%z IN ('fnm env --use-on-cd') DO CALL %%z
)
在 Cmder 中使用
用法与常规 WinCMD 安装非常相似,只需进行一些调整,以便从 cmder 启动脚本中调用。此示例假设环境变量 CMDER_ROOT 已设置为 Cmder 安装的根目录。
然后你可以这样做:
- 创建一个 .cmd 文件来调用它
:: %CMDER_ROOT%\bin\fnm_init.cmd
@echo off
FOR /f "tokens=*" %%z IN ('fnm env --use-on-cd') DO CALL %%z
- 将其添加到启动脚本中
:: %CMDER_ROOT%\config\user_profile.cmd
call "%CMDER_ROOT%\bin\fnm_init.cmd"
你也可以将 %CMDER_ROOT% 替换为其他方便的路径。
配置
用法
贡献
欢迎提交 PR :tada:
开发:
# Install Rust
git clone https://github.com/Schniz/fnm.git
cd fnm/
cargo build
运行二进制文件:
cargo run -- --help # Will behave like `fnm --help`
运行测试:
cargo test