如何 specify/enforce 在 package.json 中使用特定的 node.js 版本?

How to specify/enforce a specific node.js version to use in package.json?

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

最好在 g运行t 或 bower 或 npm 中进行一些检查以停止,如果某个 npm/node 版本未用于 运行 当前构建。

您可以在 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

如果你想强制执行特定版本的 npm,你可以使用: https://github.com/hansl/npm-enforce-version

如果你想在执行时强制执行一个节点版本,你可以通过检查来读取当前 运行 的节点版本:

process.versions

更多信息:https://nodejs.org/api/process.html#process_process_versions

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

例如,如果您想确保您拥有的最低 node.js 版本为 6.9,最高为 6.10,那么您可以指定以下内容

package.json
{
    "name": "Foo",
    ....
    "engines": {
        "node": ">=6.9 <=6.10"
    }
}

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

您在服务器端代码中调用此函数。它使用正则表达式检查 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}`
    );
  }
};

用法:

checkNodeVersion(8)

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

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

    {
      "name": "example",
      "version": "1.0.0",
      "engines": {
       "node": ">=14.0.0"
      }
    }
    
  2. 在您的项目中创建一个 .npmrc 文件,与您的 package.json.

    处于同一级别
  3. 在新建的.npmrc文件中,添加engine-strict=true.

    engine-strict=true
    

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