如何查找项目支持的节点版本

问题描述 投票:0回答:8

除了反复试验之外,还有其他方法可以检测我应该在存储库上使用的节点版本吗?

随着 Web 框架的快速崛起,回溯 6、12 或 24 个月以上的项目已成为一种普遍需求。 过去几周我做了很多这样的事情,我检测正确节点版本的过程已经变成:

git clone [REPO]
npm i
[build]
### if error
rm -r node_modules
nvm use 4, 5 or 6
npm i
[build]

我不禁觉得这里缺少一些非常基本的东西。 感谢您与我分享的任何智慧!

node.js npm nvm
8个回答
24
投票

正如其他答案中提到的,某些软件包在

engines
中有一个
package.json
字段。如果用户尝试在包不支持的 Node.js 版本上安装包,
npm
将警告用户。
engines
字段如下所示:

{
  "engines": {
    "node": ">=4.0.0"
  }
}

更多信息:https://docs.npmjs.com/cli/v9/configuring-npm/package-json#engines


此外,许多软件包都有 CI,设置为自动测试软件包。这些 CI 配置文件通常包含要测试的 Node.js 版本列表。一般来说,CI 配置中的最低版本号是包支持的最低版本。

常见的 CI 配置文件是

.travis.yml
appveyor.yml
circle.yml
.github/workflows
中的任何文件。

示例:

.travis.yml

language: node_js
node_js:
  - "4"
  - "5"
  - "6"
  - "7"

此配置意味着该包可能支持 Node.js v4+


13
投票

如果开发人员未在 package.json 中指定节点引擎参数,您可以尝试在

node_modules
文件夹的 package.json 中查看相同的参数。如果您使用常见的、支持良好的模块,那么它很可能会被定义。运行以下命令将为您提供一个半排序的版本列表供您浏览。

grep -hoP '"node":.*' node_modules/*/package.json | sort

通常,需要最高版本节点的模块是项目运行所需的节点版本的决定因素。


10
投票

该项目可能有一个

.nvmrc
文件,其中包含其有效版本。


6
投票

如果这些是您自己的存储库,那么您可以将 Node 版本存储在 package json 中以供参考。

"version": "1.0.0",
"engines": {
    "node": "7.x"
},
"description": "..."

这不会自动设置正确的版本,但它会为您提供查看的地方。


3
投票

如果您确实需要反复试验,您可以使用 npm 的 node 结合 npx

来加快该过程
npx node@4 myscript.js

甚至还有一个 shell 自动回退选项,您可以这样设置

node@4 myscript.js

2
投票

目前,随着发布周期的加快,版本数量已变得难以承受。

比尝试/错误更好的解决方案是查看项目使用的文件/文件夹的日期并在以下链接中搜索nodejs版本的发布日期:

https://nodejs.org/en/download/releases/

在搜索框中,以空格开头,然后输入版本的前 1-2 个数字,然后检查发布日期。

 14
(注意空格)将显示来自
Node.js 14.xx.xx
的版本。

虽然这不是完美的解决方案,因为该项目可能仍然是使用更旧的版本编写的,但它至少会显示当时发布的兼容版本。


0
投票

如果您使用的是纱线,则可以使用

yarn why node
yarn why @types/node


0
投票

我在 package-lock.json 文件中找到了 Node 版本,位于:

"engines": {
    "node": ">= 10.13.0",
    "npm": ">= 6.11.0",
    "yarn": ">= 1.13.0"
}
© www.soinside.com 2019 - 2024. All rights reserved.