如果节点版本不匹配,则阻止 npm 启动

Prevent npm start if node version mismatch

我有一个项目需要 Node >= V14,如果节点版本不匹配,我想阻止 npm 脚本的执行。

package.json中使用.npmrcengines,如果节点版本不匹配,我可以防止npm install从运行。

但是,如果没有找到合适的节点版本,有什么方法可以防止 npm start 执行?

取决于您的 start 做什么,但如果是您的代码:

if (process.versions.node.split('.')[0] < 14) process.exit(1)

简短回答: NPM 不提供实现此目的的内置功能。


解决方案:

但是您的要求可以通过使用自定义 node.js 帮助程序脚本来满足:

  1. 将以下 check-version.js 脚本保存在项目目录的根目录中,即将其保存在与 package.json 相同的级别居住地

    检查-version.js

    const MIN_VERSION = 14;
    const nodeVersion = process.version.replace(/^v/, '');
    const [ nodeMajorVersion ] = nodeVersion.split('.');
    
    if (nodeMajorVersion < MIN_VERSION) {
      console.warn(`node version ${nodeVersion} is incompatible with this module. ` +
          `Expected version >=${MIN_VERSION}`);
      process.exit(1);
    }
    
  2. package.jsonscripts 部分定义 start 脚本如下:

    package.json

    ...
    "scripts": {
      "start": "node check-version && echo \"Running npm start\""
    },
    ....
    

    注意echo \"Running npm start\" 部分(以上)替换为您当前的 start 命令。


解释:

  • check-version.js中我们通过process.version and remove the v prefix using the replace()方法获取Node.js版本字符串。

    注意: 您可能更喜欢使用 process.versions.node 而不是 replace 来获取没有前缀 [=19] 的版本字符串=].

  • 接下来我们仅从版本字符串中获取主要版本并将其分配给nodeMajorVersion变量。

  • 最后在 if 语句中,我们检查 nodeMajorVersion 是否低于预期的最小 node.js 版本 (MIN_VERSION)。如果它低于预期版本,我们会警告用户并调用 process.exit() 方法,退出代码为 1.