当前位置:   article > 正文

NodeJs 如何为每个项目单独指定Node版本

NodeJs 如何为每个项目单独指定Node版本

前端技术日新月异,始终朝气蓬勃,新的框架层出不穷,有时候 Node.js 几乎每周都会发布新版本,现在更出现了 Bun 和 Deno 等 Node.js 的有力竞争者。

为什么需要为每个项目单独指定一个 Node.js 版本?

这是你这么做之前首先要明确的问题。

也许你遇到过以下情况:

  • 我想要尝鲜 Node.js v22.x 所带来的新特性
  • 我要给 ArcoDesign 贡献一波,但运行它要求 Node.js 版本为 v18.x
  • 团队成员 Node.js 版本不统一: 守旧派用 v12.x、保守派用 v14.x、激进派用 v18.x,突然某天老板让我去维护守旧派负责的项目,运行后由于Node.js版本不一致直接报错
  • 需要同时运行两个项目,但项目需要的 Node.js 版本不同
  • 我是项目的主要维护者,我希望为项目强制限制node和npm版本,防止lock文件冲突

这个时候就轮到版本管理工具大展拳脚的时候了。

都有哪些成熟的 Node.js 版本管理工具?

我们可以从 Node.js 官网看到官方推荐的版本管理工具

Node.js — Installing Node.js via package manager (nodejs.org)

其中,最流行的是 nvm、n、fnm。(由于 n 和 nvm 功能和指令相似,但不支持windows,所以这次不对其做评测)

此外从下面这篇 v2ex 贴中大家还提到了一些其他的版本管理工具/方案:

大家在开发过程中是如何管理多个项目不同的 NodeJS 版本的? - V2EX

包括:volta、asdf、webstorm

下面我们来详细对比一下

nvm/nvm-desktop

nvm 已经是大家熟知的版本管理工具了,但仍然在此挂一下 Github 地址:

nvm-sh/nvm: Node Version Manager(Linux/Mac)

coreybutler/nvm-windows

值得一提的是,nvm 的 Linux/Mac 版本和 Windows 版本是两个功能相似的由不同开发者并行开发的独立工具。

使用方法也非常简单:

  1. # 查看可用版本
  2. nvm list available
  3. # 安装指定版本
  4. nvm install 16
  5. # 使用指定版本
  6. nvm use 16
  7. # 列出本机已安装的全部版本列表(带*的为当前全局默认版本)
  8. num list

当项目繁多复杂时,问题也随之而来,使用 nvm 虽然完成了多版本管理,但是默认版本只能有一个,所以很多时候,在用 vscode 打开不同项目的时候,还需要用 nvm use 来切换不同的版本使用。

显然经常这样操作很麻烦,也容易忘记什么项目用什么版本,而且还有一个致命问题——无法同时运行两个不同版本的项目。

此前我也一直苦于习惯了 nvm 的顺滑操作,却没办法在切换项目时自动切换版本且同时运行的问题,但如今一个新工具的诞生解决了这个问题:

1111mp/nvm-desktop(提示:使用nvm-desktop无需安装nvm)

nvm-desktop 这个项目目前 star 还不多,但提供了跨平台的 nvm 图形管理界面,使用 electron 开发,且底层使用 rust 编写的命令行工具 nvmd-command 提供了智能识别项目 node 版本,自动切换和同时运行多个版本的能力。

79eb46f65ae2c59da970c1859158e9de_MD5.jpeg

f49822e5e8a8f607e5a6da61ef38d3f5_MD5.jpeg

根据 nvm-desktop 开发者解释以及我的深度体验,其可以为项目单独指定你想要的 Node 的版本

或者你也可以通过命令行为你的项目指定nodejs版本 nvmd use node_version --project

这样做会在项目的根目录下会添加一个文件:.nvmdrc,内容为你选择的 Node 的版本号,如果未添加此文件则加载为全局设置的 Node 的版本号。

且如果团队成员都安装了 nvm-desktop 则他们也可以在进入项目时无缝切换到指定版本

fnm

fnm 是一款快速简单的 Node.js 版本管理器,使用 Rust 构建。其 Github 地址:

https://www.wpsshop.cn/w/盐析白兔/article/detail/831061

推荐阅读
相关标签
  

闽ICP备14008679号