## 什么是fnm? fnm(Fast Node Manager)基于 Rust 开发,它是跨平台的,支持 macOS、Linux、Windows。 > 🚀 Fast and simple Node.js version manager, built in Rust. ## 安装fnm 以macOS为例,推荐使用[Homebrew](https://brew.sh),Windows平台推荐使用[Scoop](https://www.simaek.com/archives/163/)。 ```shell brew install fnm ``` 配置所需要的变量到当前的shell环境中,以zsh为例。 ```shell fnm env --use-on-cd >> ~/.zshrc ``` ## 使用fnm ### 使用fnm安装Node ```shell # 安装 LTS 版本 fnm install --lts # 安装指定大版本的最新版本 fnm install 18 # 安装指定版本 fnm install 18.21.1 ``` > 相反地,可通过 fnm uninstall 或 fnm uninstall 来删除指定版本,后者会同时移除别名。 ### 使用fnm切换Node版本 ```shell # 使用系统版本 fnm use system # 使用 fnm 所安装,且版本号为 18.21.1 的 Node 程序 fnm use 18.21.1 # 使用 fnm 所安装,且主版本号为 18 的最新版本的 Node 程序 fnm use 18 ``` > 只要用 fnm use 指定后,每次启动 Shell 将会默认使用对应的 Node 版本。 ### 设置别名 ```shell # 形式如:fnm alias <指定版本号> <别名> fnm alias 18.21.1 v18 # 设置别名后,可以简化指令为: fnm use v18 ``` 其实以上示例的别名意义不大,仅用于举例而已。原因是:在「不设置别名」的情况下,使用 fnm use 18,也能切换至 18.21.1。使用 fnm use 会切换至对应主版本号对应的最新版本。 假设我们安装了 18.20.0 和 18.21.1 两个主版本号相同的 Node 程序,使用 fnm use 18 只会切换至 18.21.1(即最新的版本),尽管通过 fnm alias 18.20.0 18 将 18.20.0 的别名设为 18,这样设置别名是无意义的。 此时可能需要用 fnm use 18.20 或 fnm use 18.20.0 来切换指定版本了,或者其他非纯数字的别名了。 较有意义的特殊别名 system 和 default: 前者是以 .pkg 等形式(比如官网下载的安装包)所安装的 Node 应用程序,称为系统版本。 后者是用于指定 fnm 的一个默认版本,作为与 18 是类似的,只是其语义表示默认罢了。 ```shell # 指定默认版本 $ fnm default 18.21.1 # 相当于 $ fnm alias 18.21.1 default ``` 相反地,可通过 fnm unalias 来取消别名。 ### 项目中指定特定版本 可以通过在项目根目录下添加 .node-version 或 .nvmrc 文件,并在其中指定版本。比如: $ echo '18' > .node-version 前提是,配置 fnm 环境用的是 fnm env --use-on-cd 命令,而不是 fnm env。后者没有添加 Hook,因此不会是检查对应配置文件。有兴趣的可以对比两条命令的差别就明白了。 由于团队成员所安装的 Node,其次版本或补丁版本号可能是不一样的,因此,多数情况下指定主版本号即可,无需指定到 18.21.1 等更具体的版本号(特殊场景除外)。 ## 卸载 fnm 若是通过 brew 安装的 fnm,则: $ brew uninstall fnm 接着,再移除 ~/.fnm 目录。 $ rm -rf ~/.fnm 最后,移除 bash 或 zsh 的配置文件中与 fnm 相关的配置。比如: ``` export PATH="/Users/frankie/Library/Caches/fnm_multishells/49559_1670052262156/bin":$PATH export FNM_VERSION_FILE_STRATEGY="local" export FNM_DIR="/Users/frankie/Library/Application Support/fnm" export FNM_NODE_DIST_MIRROR="https://nodejs.org/dist" export FNM_MULTISHELL_PATH="/Users/frankie/Library/Caches/fnm_multishells/49559_1670052262156" export FNM_ARCH="x64" export FNM_LOGLEVEL="info" autoload -U add-zsh-hook _fnm_autoload_hook() { if [[ -f .node-version || -f .nvmrc ]]; then fnm use --silent-if-unchanged fi } add-zsh-hook chpwd _fnm_autoload_hook && _fnm_autoload_hook rehash ``` https://www.jianshu.com/p/0843d55e044e Loading... ## 什么是fnm? fnm(Fast Node Manager)基于 Rust 开发,它是跨平台的,支持 macOS、Linux、Windows。 > 🚀 Fast and simple Node.js version manager, built in Rust. ## 安装fnm 以macOS为例,推荐使用[Homebrew](https://brew.sh),Windows平台推荐使用[Scoop](https://www.simaek.com/archives/163/)。 ```shell brew install fnm ``` 配置所需要的变量到当前的shell环境中,以zsh为例。 ```shell fnm env --use-on-cd >> ~/.zshrc ``` ## 使用fnm ### 使用fnm安装Node ```shell # 安装 LTS 版本 fnm install --lts # 安装指定大版本的最新版本 fnm install 18 # 安装指定版本 fnm install 18.21.1 ``` > 相反地,可通过 fnm uninstall <version> 或 fnm uninstall <alias-name> 来删除指定版本,后者会同时移除别名。 ### 使用fnm切换Node版本 ```shell # 使用系统版本 fnm use system # 使用 fnm 所安装,且版本号为 18.21.1 的 Node 程序 fnm use 18.21.1 # 使用 fnm 所安装,且主版本号为 18 的最新版本的 Node 程序 fnm use 18 ``` > 只要用 fnm use <version> 指定后,每次启动 Shell 将会默认使用对应的 Node 版本。 ### 设置别名 ```shell # 形式如:fnm alias <指定版本号> <别名> fnm alias 18.21.1 v18 # 设置别名后,可以简化指令为: fnm use v18 ``` 其实以上示例的别名意义不大,仅用于举例而已。原因是:在「不设置别名」的情况下,使用 fnm use 18,也能切换至 18.21.1。使用 fnm use <major> 会切换至对应主版本号对应的最新版本。 假设我们安装了 18.20.0 和 18.21.1 两个主版本号相同的 Node 程序,使用 fnm use 18 只会切换至 18.21.1(即最新的版本),尽管通过 fnm alias 18.20.0 18 将 18.20.0 的别名设为 18,这样设置别名是无意义的。 此时可能需要用 fnm use 18.20 或 fnm use 18.20.0 来切换指定版本了,或者其他非纯数字的别名了。 较有意义的特殊别名 system 和 default: 前者是以 .pkg 等形式(比如官网下载的安装包)所安装的 Node 应用程序,称为系统版本。 后者是用于指定 fnm 的一个默认版本,作为与 18 是类似的,只是其语义表示默认罢了。 ```shell # 指定默认版本 $ fnm default 18.21.1 # 相当于 $ fnm alias 18.21.1 default ``` 相反地,可通过 fnm unalias <alias-name> 来取消别名。 ### 项目中指定特定版本 可以通过在项目根目录下添加 .node-version 或 .nvmrc 文件,并在其中指定版本。比如: $ echo '18' > .node-version 前提是,配置 fnm 环境用的是 fnm env --use-on-cd 命令,而不是 fnm env。后者没有添加 Hook,因此不会是检查对应配置文件。有兴趣的可以对比两条命令的差别就明白了。 由于团队成员所安装的 Node,其次版本或补丁版本号可能是不一样的,因此,多数情况下指定主版本号即可,无需指定到 18.21.1 等更具体的版本号(特殊场景除外)。 ## 卸载 fnm 若是通过 brew 安装的 fnm,则: $ brew uninstall fnm 接着,再移除 ~/.fnm 目录。 $ rm -rf ~/.fnm 最后,移除 bash 或 zsh 的配置文件中与 fnm 相关的配置。比如: ``` export PATH="/Users/frankie/Library/Caches/fnm_multishells/49559_1670052262156/bin":$PATH export FNM_VERSION_FILE_STRATEGY="local" export FNM_DIR="/Users/frankie/Library/Application Support/fnm" export FNM_NODE_DIST_MIRROR="https://nodejs.org/dist" export FNM_MULTISHELL_PATH="/Users/frankie/Library/Caches/fnm_multishells/49559_1670052262156" export FNM_ARCH="x64" export FNM_LOGLEVEL="info" autoload -U add-zsh-hook _fnm_autoload_hook() { if [[ -f .node-version || -f .nvmrc ]]; then fnm use --silent-if-unchanged fi } add-zsh-hook chpwd _fnm_autoload_hook && _fnm_autoload_hook rehash ``` https://www.jianshu.com/p/0843d55e044e 最后修改:2024 年 02 月 27 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏