JS:nvmrc与package.json engines有什么区别?

16

我正在尝试在我的 JavaScript 项目中锁定 node 和 npm 版本,以确保其他开发人员在构建捆绑包提交时具有这些特定版本。我刚刚将以下内容添加到我的 package.json 文件中:

  "engineStrict" : true,
  "engines": {
    "node" : "10.10.0",
    "npm" : "6.5.0"
  },

这会彻底强制执行那些版本吗?因为我习惯于成为前端项目中唯一的开发者,或是接手已有此设置的项目,所以对锁定版本不太熟悉。
另外,如果我使用“engines”(版本管理工具),同时添加一个指定相同版本的.nvmrc文件是否有益处,还是说这是多余的?


1
这个回答解决了你的问题吗?如何在package.json中指定所需的Node.js版本? - RobC
相关链接:https://stackoverflow.com/q/60124530/320399 - blong
1个回答

25

强制使用指定的Node.js版本

engineStrict自 npm v3 版本已被废弃,但您可以在 .npmrc 文件中设置engine-strict=true。如果您在 package.json 中设置了 engines,则在安装到不支持的 Node.js 版本时会抛出错误。

.nvmrc文件方便开发人员使用

为了让其他开发人员更轻松地使用支持的 Node.js 版本,您可以添加一个 .nvmrc 文件。现在其他开发人员可以运行 nvm use 来自动使用支持的版本。


谢谢@elias。我认为如果我选择使用.nvmrc而不是engines,我就不能指定npm版本,对吗? - burtonLowel
你不需要选择 :). 它们互相补充: package.json + .npmrc 强制使用版本, .nvmrc 使其他人更容易使用正确的版本。 - Elias Meire
只是为了明确一下...如果我正在编写一个模块,我希望其他人安装它,我会在我的package.json中设置"engines"字段。如果我是一个使用dep的应用程序,并且dep设置了他们的引擎字段,那么我只需要在.npmrc中设置engines-strict配置。也就是说,在不使用作为dep的package.json中设置引擎字段似乎没有任何价值。如果我将"engines"设置为Node 12,则可以在node 8中运行所有包脚本.....没有任何投诉。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接