前言
在同时开发多个项目时,我们经常需要在各个项目中切换,而各个项目很可能使用不同的 Node.js 版本,如何维护多个 Node.js 版本以及在多个项目之间切换 Node.js 成为了一件麻烦的事情。
虽然目前市面上已经有了诸如 nvm、n 之类的版本管理工具,但是它们各有各自的问题。
nvm 是目前最流行的 Node.js 版本管理工具,但其不能跨平台、运行缓慢的问题诟病已久,每次启动 shell 时加载 nvm 都是一次漫长的煎熬。
n 作为一个使用 node 编写的 Node.js 版本管理工具,自身便依赖于 Node.js ,这就牵扯出了经典的蛋生鸡还是鸡生蛋问题;再加上它经常需要使用 sudo 来执行,我们只能将它放弃。
fnm 的优势
什么是 fnm 呢? 即 Fast Node Manager,从名字上就能感觉到它很快;没错,它的确非常快!
它的特点如下:
- 跨平台运行,支持 Linux / Windows / macOS
- 使用 Rust 编写,单文件即可运行,无需其他依赖
- 兼容 .node-version 和 .nvmrc 文件
安装
一键安装命令(Linux / macOS):
curl -fsSL https://fnm.vercel.app/install | bash
使用包管理器安装:
# Linux / macOS
brew install fnm
# Windows
winget install Schniz.fnm
如果网络环境受限,也可以手动下载安装。从 Github Release 页面下载对应系统和架构的二进制文件压缩包,解压后将二进制文件移动到自己放置工具的文件夹下,然后将对应路径配置到环境变量的 Path 中,确保能在 shell 中执行 fnm 命令即可。
配置
安装完 fnm 后,还需要配置 shell 来提供相关环境变量,以下是几种不同 shell 的配置方式:
Bash
# 向用户目录下的 .bashrc 文件中追加以下内容
eval "$(fnm env --use-on-cd --shell bash)"
ZSH
# 向用户目录下的 .zshrc 文件中追加以下内容
eval "$(fnm env --use-on-cd --shell zsh)"
PowerShell
# 向 ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 文件中追加以下内容
# 如果文件不存在可以手动创建
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
使用
fnm 最常用的命令包含如下几个
fnm list
# 该命令查看本地已安装的所有 Node.js 版本,fnm list-remote 可以查看远端一共有哪些 Node.js 版本可供安装
fnm install 版本号
# 该命令安装指定版本的 Node.js ,如 fnm install 18.2,也可以使用 fnm install --lts 来安装最新的 lts 版本
fnm use 版本号
# 该命令切换当前 shell 所使用的 Node.js 版本,只在当前 shell 生效,对全局 Node.js 版本没有影响
fnm default 版本号
# 该命令设置全局默认 Node.js 版本
fnm --help
# 该命令可查看 fnm 支持的所有命令
使用时可以在项目根目录中新增 .node-version 或 .nvmrc 文件,并向其中写入要使用的 Node.js 版本号;这样当在 shell 中切换到对应项目根目录时,fnm 会自动切换到文件中指定的 Node.js 版本,并在终端中提示当前运行的 Node.js 版本。