如何强制在package.json中使用特定的node.js版本?

cil*_*lap 14 node.js npm

如果用户正在使用项目中定义的不同node.js版本,我正在寻找一种打破构建的方法.

理想情况下,如果某个npm/node版本不用于运行当前版本,则将一些支票放入grunt或bower或npm中停止.

bli*_*mer 32

尽管engineStrict弃用,您仍然可以完成此行为,而无需使用额外的脚本在项目中强制使用 Node 版本。

  1. 将属性添加engines到您的package.json文件中。例如:

    {
      "name": "example",
      "version": "1.0.0",
      "engines": {
       "node": ">=14.0.0"
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在您的项目中创建一个.npmrcpackage.json.

  3. 在新创建的.npmrc文件中,添加engine-strict=true.

    engine-strict=true
    
    Run Code Online (Sandbox Code Playgroud)

这将engines在用户运行时强制执行您定义的npm install。我在 GitHub 上创建了一个简单的示例供您参考。


Yai*_*lka 9

“engineStrict”已被删除,“engines”仅适用于依赖项。如果您想检查 Node 的运行时版本,这对您有用:

您可以在服务器端代码中调用此函数。它使用正则表达式使用eremzeit 的响应来检查 Node 的运行时版本。如果未使用适当的版本,它将抛出错误:

const checkNodeVersion = version => {
  const versionRegex = new RegExp(`^${version}\\..*`);
  const versionCorrect = process.versions.node.match(versionRegex);
  if (!versionCorrect) {
    throw Error(
      `Running on wrong Nodejs version. Please upgrade the node runtime to version ${version}`
    );
  }
};
Run Code Online (Sandbox Code Playgroud)

用法:

checkNodeVersion(8)
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以在 package.json 中使用“engineStrict”属性

查看文档以获取更多信息:https : //docs.npmjs.com/files/package.json

2019 年 6 月 23 日更新

"engineStrict" 在 npm 3.0.0 中删除了属性。

参考:https : //docs.npmjs.com/files/package.json#enginestrict

  • 您还可以将“engine-strict=true”放入“.npmrc”文件中以在项目中强制执行。 (5认同)
  • engineStrict 在 npm 的 v3 中被弃用了,你有新的建议吗? (3认同)
  • @cilap 由于`engineStrict` 已被弃用,你应该使用你应该使用`--engine-strict=true` 作为`npm` 的参数,并结合`package.json` 中的`engines` 参数 (3认同)

Ner*_*rve 5

您可以使用文件中的engines属性package.json

比如你要保证node.js版本最低是6.9,最高是6.10,那么你可以指定如下

package.json
{
    "name": "Foo",
    ....
    "engines": {
        "node": ">=6.9 <=6.10"
    }
}
Run Code Online (Sandbox Code Playgroud)