NVM ❌ FNM ✅

Failure is an option,but fear is not

大家好,我是柒八九 。一个专注于前端开发技术/RustAI应用知识分享Coder

前言

Node.js知道的哇,在前端开发中它具有举足轻重的地位。

可以说,没有Node.js的参与,那前端开发将寸步难行。如果你刚接触前端,那首要的事情就是在你本机上按照Node.js

通常会使用如下步骤:

  1. 首先,到Node.js 官网并获取最新的LTS版本(20.10.0):

  2. 根据你的本地 OS 而采用不同的安装方式。

  3. 随着时间的推移,我们还需要手动检查是否有可用的更新。如果是这样,我们将需要卸载先前版本的 Node 并重新执行此过程。

如果采用上面的安装方式,用时一时爽,遇到问题直接火葬场

  1. Node.js不会通知用户何时有可用的更新,这意味着我们必须定期检查更新
  2. 此外,每次有更新时,我们都必须重新安装Node,这浪费时间和精力
  3. 最后,我们无法在一台计算机上安装不同版本的 Node 。这在某些情况下是个问题,例如,某个项目依赖于Node v16,而另一个应用使用Node v18

其实,针对上面的问题,市面上是有解决方案的。一个比较成熟的方案就是使用nvm(Node Version Manager),它允许我们在单个机器上安装和管理多个Node.js版本。并且能够快速安装和卸载指定的Node

但是呢,nvm虽好,但是不够完美。

  • 下载Node版本,速度较慢
  • 无法跨平台,在window环境需要nvm-windows库,并且这个库不受官方支持
  • ....

之前使用nvm是没得退路,但是现在我们有了更好的选择 - 那就是fnm(Fast Node Manager)

它能很好的解决nvm的各种弊端。

  • fnm 速度快,稳定性高 (基于Rust开发)
  • 跨平台 (其实最看重的是这个特性)
  • ....

所以,我们今天来聊聊fnm - 你的升级版的Node Version Manager

好了,天不早了,干点正事哇。

我们能所学到的知识点

  1. 安装 fnm
  2. 使用 fnm 管理 Node.js 版本
  3. 设置 Node.js 版本别名
  4. 卸载 fnm
  5. fnm 竞品 - volta

1. 安装 fnm

自动脚本

fnm团队打包了一个自动脚本,使下载软件变得非常简单。

在终端中输入以下命令:

shell 复制代码
curl -fsSL https://fnm.vercel.app/install | bash

但是呢,使用curl安装时,总是会出现网络错误。所以,我们还可以使用其他方式按照。只不过需要额外处理一些配置信息。

手动脚本

但是呢,这种手动安装,需要自己配置环境变量。

我们可以按照自己本地环境进行新增处理。使用vim处理也可以,使用IDE也可以。记住在修改后,使用source 来重新加载配置文件。

发布页下载压缩包

前往发布页面并安装他们的二进制文件。

也是需要手动配置环境变量。

完成后,终端中输入以下命令验证是否安装成功。

bash 复制代码
fnm --help

应该返回这个结果:

这意味着我们的安装成功了!


2. 使用 fnm 管理 Node.js 版本

要下载和安装特定版本的Node.js,可以使用以下语法:

bash 复制代码
fnm install <version>

例如,这个命令在开发机器上安装了16.8.0

bash 复制代码
fnm install 16.8.0

如果我们想使用最新版本,只需使用--latest标志

bash 复制代码
$ fnm install --latest
Installing Node v21.4.0 (x64)

如果要安装lts版本,只需传递--lts参数:

bash 复制代码
$ fnm install --lts
Installing Node v20.10.0 (x64)

列出所有 Node.js 版本

下面的命令要求fnm列出所有可下载的 Node 版本:

bash 复制代码
fnm ls-remote

如果想查看系统上安装了哪些版本,可以使用下面的命令

bash 复制代码
fnm list

在我本地机器上按照了三个 Node.js 版本(16 /20/21)。

使用特定版本的 Node.js

要使用特定版本的 Node,我们必须运行 use 命令。

bash 复制代码
fnm use <version>

例如,如果我们想让我们的计算机切换到 Node 20.10.0

bash 复制代码
fnm use 20.10.0

我们可以用current命令验证我们是否已经更改了版本:

shell 复制代码
fnm current

这表明我们的机器现在运行的是 Node 版本 20.10.0

卸载 Node.js 版本

可以使用uninstall来卸载指定Node

xml 复制代码
fnm uninstall <version>

例如,如下命令将删除 Node 21.4.0:

bash 复制代码
fnm uninstall 21.4.0 #卸载最新版本的node

3. 设置 Node.js 版本别名

如果我们本地有很多项目,并且项目和项目之间的Node版本差异很大。此时,我们就可以借助alias来为特定版本的Node起一个高端大气上档次的名字了。

设置别名的语法:

shell 复制代码
fnm alias <version> <name>

例如,

shell 复制代码
fnm alias 20.10.0 A

上述命令给v20.10.0版本的Node给了一个A。这样在使用<version>的地方都可以用A来代替。

perl 复制代码
fnm use A 
fnm use 20.10.0

要验证我们的别名是否成功配置,我们可以重新运行fnm list


4. 卸载 fnm

在某些情况下,可能会遇到错误,例如开发过程中的命令问题。因此,我们可能不得不重新安装fnm工具来解决这个问题。

要清除 fnm,我们首先要找到其安装目录:

ini 复制代码
fnm env #获取所有环境变量

export PATH="/Users/XXX/Library/Caches/fnm_multishells/5801_1702468297944/bin":$PATH
export FNM_LOGLEVEL="info"
export FNM_MULTISHELL_PATH="/Users/XXX/Library/Caches/fnm_multishells/5801_1702468297944"
export FNM_NODE_DIST_MIRROR="https://nodejs.org/dist"
export FNM_DIR="/Users/XXX/Library/Application Support/fnm"
export FNM_COREPACK_ENABLED="false"
export FNM_ARCH="x64"
export FNM_VERSION_FILE_STRATEGY="local"
export FNM_RESOLVE_ENGINES="false"
rehash

这里,FNM_DIR 变量表示 fnm 的位置。接下来,进入路径并简单地移除 fnm 文件夹

shell 复制代码
rm -rf fnm #移除这个文件夹将卸载这个软件

5. fnm 竞品 - volta

volta它不是管理多个版本的 Node.js,而是管理项目及其依赖项。当我们创建新项目时,volta 会自动检测所需的 Node.js 版本并为我们安装它。

volta 还支持其他工具,如 YarnRust,而不仅仅是 Node.js!这使它成为那些使用多种编程语言并需要单一工具管理它们的开发人员的理想选择。与 nvm 一样,volta 提供了一个命令行界面,用于在 Node.js 的不同版本之间切换。

要安装 volta,我们可以使用以下命令:

arduino 复制代码
curl https://get.volta.sh | bash

这个命令下载并执行了安装 volta 的脚本。

如何使用特定版本的 NodeJS

  1. 安装所需版本:安装了 volta 后,我们可以使用它创建新项目并使用 volta install 命令设置所需的 Node.js 版本,以下命令创建了一个新项目,并将所需的 Node.js 版本设置为 16.0.0: volta install node@16.0.0

  2. 在该项目的上下文中运行命令:此命令在项目的上下文中运行 app.js 文件,使用所需版本的 Node.js。

    arduino 复制代码
    volta run node app.js
  3. 切换版本:我们还可以使用 Volta 在不同版本的 Node.js 之间切换。例如,要切换到 10.0.0 版本,我们可以使用以下命令:

    css 复制代码
    volta pin node@10.0.0
  4. 使用别名:最后,以下命令将我们的环境切换到使用 Node.js 版本 16.0.0。我们也可以使用 nvm alias 命令设置 Node.js 的默认版本:

    csharp 复制代码
    nvm alias default 16.0.0

volta 的一个潜在缺点是它仍然是一个相对较新的工具,因此可能不像 nvm 那样经过实战考验,而且社区支持有限,插件和集成较少。此外,volta 的设置比 nvm 需要更多步骤,如安装 shell shim 和修改我们的$PATH 环境变量。


后记

分享是一种态度

全文完,既然看到这里了,如果觉得不错,随手点个赞和"在看"吧。

相关推荐
gnip16 小时前
链式调用和延迟执行
前端·javascript
SoaringHeart16 小时前
Flutter组件封装:页面点击事件拦截
前端·flutter
杨天天.16 小时前
小程序原生实现音频播放器,下一首上一首切换,拖动进度条等功能
前端·javascript·小程序·音视频
Dragon Wu16 小时前
React state在setInterval里未获取最新值的问题
前端·javascript·react.js·前端框架
Jinuss16 小时前
Vue3源码reactivity响应式篇之watch实现
前端·vue3
YU大宗师16 小时前
React面试题
前端·javascript·react.js
木兮xg16 小时前
react基础篇
前端·react.js·前端框架
ssshooter17 小时前
你知道怎么用 pnpm 临时给某个库打补丁吗?
前端·面试·npm
IT利刃出鞘17 小时前
HTML--最简的二级菜单页面
前端·html
yume_sibai17 小时前
HTML HTML基础(4)
前端·html