Nodejs 应用程序中的强制 NPM 版本

Forced NPM version in Nodejs application

我们有一个 Nodejs + Express 应用程序,并且希望仅当 npm -v 等于 process.env.npm_package_engines_npm 时强制应用程序成功 运行 npm install,这是package.json

中定义的 npm 版本

这有可能吗?

此要求的原因是为了 100% 确保所有依赖项将以相同的方式安装在所有开发实例中,因为最近我们 运行 解决了一些开发人员在 5.2.0 版和其他 5.3 版中遇到的一些问题.0 因此,结果不一样。

您可以使用js脚本文件和运行 node preinstall.js

// preinstall.js
const exec = require('child_process').exec;

exec('npm -v', function (error, stdout, stderr) {
  if (error) {
    console.log('error: ' + error + stderr);
    return;
  }

  const nodeVersion = stdout;

  if (process.env.npm_package_engines_npm === nodeVersion) {
    exec('npm install');
  }
});

您可以指定 engines property in your package.json

如果 npm 版本与您指定的版本不匹配,这将打印出警告(这至少让用户清楚他们需要更新 npm,即使它不会阻止实际安装)。

如果您传递 engine-strict CLI 标志,那么如果版本不匹配,npm 将出错:

$ npm install --engine-strict