要在 Mac 上查找项目所需的 Node.js 版本,请在检查终端中当前激活的版本之前,先查看其版本文件和配置。首先查看 .nvmrc,然后检查 package.json 中的 volta 和 engines 设置。这些线索含义各不相同:有些用于为特定工具固定版本,而另一些则描述兼容性范围。

1. 在终端中打开项目文件夹

在“访达”(Finder)中找到项目文件夹。按住 Control 键并点按该文件夹,如果选项可用,请选取**“在文件夹中新建终端”**;否则,打开“终端”并使用 cd 导航到该文件夹。在键入 cd 后,你可以将文件夹从“访达”拖入“终端”窗口,然后按 Return 键。这样可以避免错误输入包含空格的路径。

在项目目录中运行以下只读命令:

ls -a
grep -nE '"(engines|volta)"|"node"' package.json .nvmrc

ls -a 会列出包括 .nvmrc 在内的隐藏文件。grep 会输出已存在文件中匹配的行;如果某个文件不存在,它可能会输出该文件的错误信息,这并不意味着项目损坏。若要更完整地查看特定文件,可以在文件存在时使用 sed -n '1,160p' package.json 或 sed -n '1,20p' .nvmrc。这些命令仅用于显示文本,不会对项目进行任何修改。

2. 将 .nvmrc 视为版本管理器的指令

如果找到了 .nvmrc,请读取其内容。类似 20.16.0 这样的值表示该项目为 nvm 用户指定了该 Node.js 版本。nvm 还接受诸如 20 或 lts/* 之类的版本选择器,因此该文件可能不会指定单一且固定的补丁版本。nvm 文档指出,其命令可以在项目目录或父目录中查找 .nvmrc,且在不带版本号的情况下执行 nvm use 会在文件可用时直接使用该文件。nvm 自述文件:.nvmrc

在 macOS 上,检查 nvm 是否可用以及它在此目录中解析出什么:

command -v nvm
nvm use
node --version

当当前 Shell 中加载了 nvm 时,command -v nvm 应输出 nvm。如果该命令不可用,不要假定 .nvmrc 无效;即使你没有安装或加载 nvm,该文件仍然可以记录项目的选择。如果已安装对应版本,nvm use 会选择该文件中指定的版本;如果尚未安装,nvm 可能会提示你进行安装。只有在你确实打算将该 Node 版本添加到 Mac 上时才执行安装。

3. 检查 package.json 中的 Volta 和兼容性范围

查找顶层的 volta 对象。例如:

"volta": {
  "node": "20.16.0"
}

这是针对使用 Volta 管理的项目所固定的 Node 版本。Volta 文档说明,volta pin 会将所选工具的版本存储在 package.json 中,并且 Volta 会将 Node 命令路由到项目对应的版本。了解 Volta 如果你使用 Volta,在项目目录下运行 node --version 可以显示工具链正在运行哪个版本;如果不使用 Volta,该对象仅作为项目元数据保留,并不是 macOS 终端可执行的命令。

此外,还要检查 engines 属性,通常写作如下形式:

"engines": {
  "node": ">=18 <23"
}

这给出了一个兼容性范围,并不一定代表开发者实际安装的版本。npm 的文档指出,engines.node 用于指定包可在哪些 Node 版本上运行;除非启用了 engine-strict,否则 npm 仅将其视为建议,并且可能仅在安装依赖项时发出警告。npm package.json 文档 较宽的范围意味着项目声称在允许的版本之间都具有兼容性;它并未确立单一具体的预期版本。

4. 比较文件并解决冲突的线索

将具体的 .nvmrc 或 Volta pin 视为特定工具管理版本的明确依据。将 engines.node 视为兼容性约束。如果这些文件存在分歧——例如,.nvmrc 写的是 18,但 engines.node 要求 >=20——切勿随意选择其中之一。这些文件可能已过时、可能服务于不同的工具,或者可能反映了最近的更改。请查看项目的 README 和配置说明,然后询问维护者或团队他们希望贡献者遵循哪个文件。

项目也可能在其他版本管理器使用的文件或 CI 配置中定义版本。如果 .nvmrc 和 package.json 没有提供有效信息,请使用 ls -a 搜索可见的项目文件,并查看配置文档和工作流配置。CI 文件可能会显示用于自动化构建的版本,但该版本可能与本地开发环境的配置不同;在将其视为项目要求之前,请先确认具体上下文。

5. 验证 Mac 实际使用的 Node 版本

在确定了项目的指示之后,将其与当前激活的运行时进行比较:

node --version
command -v node

第一个命令报告当前激活的 Node 版本;第二个命令显示通过 Shell 的 PATH 所选中的可执行文件路径。这些描述的是你当前的终端环境,本身并不代表项目的需求。如果使用 nvm,在检查前先在项目目录中运行 nvm use。如果使用 Volta,请在对应目录中运行检查,以便应用其项目设置。如果报告的版本仍与固定的版本不一致,则可能是相关管理器未在此 Shell 中安装、加载或未能控制 node 可执行文件。

实际的答案来自对两方的综合对照:仓库的版本声明告诉你它所要求的版本,而 node --version 告诉你 Mac 当前运行的版本。如果两者不匹配,请在依据本地运行结果之前,先解决管理器或项目指令的配置问题。

来源