使用fnm管理node版本
前言
全面提到了 fnm + corepack + pnpm 的使用,这就先说说 fnm ,管理 node 的版本。corepack 使用 node 自带的,pnpm 用来管理全局安装的包。
安装
- macOS:
brew install fnm
- windows:
scoop install fnm
shell 配置
fnm completions --shell <SHELL>
windows 下, 要注意配置文件的是在 %USERPROFILE%
目录下, 就是下面的 ~
目录, 并且区分 PowerShell
版本,区分文件路径:
- Built in PowerShell (aka “Windows PowerShell”): ~\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
- The newer, PowerShell >= 7, that’s not built in: ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
使用
fnm list
: 本地有哪些版本fnm ls-remote
: 远程有哪些版本fnm current
: 当前使用的版本fnm version
: 查看 fnm 版本fnm install
: 安装指定版本, 比如fnm install --lts
fnm use
: 使用指定版本, 比如fnm use 14.17.0
- 项目或目录配置了
.node-version
或者.nvmrc
, 使用fnm use
切换
全局包管理
- 如果包有其他的包管理安装方式, 比如
scoop
,homebrew
, 那就统一使用其他的软件包管理。 pnpm install -g
安装,pnpm
不会随着切换版本, 切换安装路径, 都在~/Library/pnpm
中- 推荐
nlx
的方式,临时安装并使用。
退出目录,自动切换
- Better Support for Automatic Switching · Issue #144 · Schniz/fnm
- Automatical version switch based on nvm (using fnm) | by Fei Liu | Medium
需要借助 add-zsh-hook
, 在 .zshrc
中配置:
autoload -U add-zsh-hook
load-nvmrc() {
DEFAULT_NODE_VERSION=`$FNM_DIR/aliases/default/bin/node -v`
if [[ (-f .nvmrc && -r .nvmrc) || (-f .node-version && -r .node-version) ]]; then
fnm use --install-if-missing --silent-if-unchanged
elif [[ `node -v` != $DEFAULT_NODE_VERSION ]]; then
echo Reverting to node from "`node -v`" to "$DEFAULT_NODE_VERSION"
fnm use $DEFAULT_NODE_VERSION
fi
}
add-zsh-hook chpwd load-nvmrc
技术总结
可替代 volta 管理 node 版本, 配合 corepack 管理包管理工具。