我们有一个Nodejs + Express应用程序,并且只有在npm install
等于npm -v
时才强制应用程序成功运行process.env.npm_package_engines_npm
,这是包中定义的npm版本上传.json
这有可能吗?
这个要求的原因是100%确保所有依赖关系将在所有开发实例中以相同的方式安装,因为最近我们遇到了一些开发人员拥有版本5.2.0和其他5.3.0的问题,因此,结果不一样。
答案 0 :(得分:2)
您可以使用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');
}
});
答案 1 :(得分:1)
您可以指定engines
property in your package.json
如果npm版本与您指定的版本不匹配,那将打印出警告(这至少使用户明白他们需要更新npm,即使它没有阻止实际安装)。
如果您传递engine-strict CLI标志,那么如果版本不匹配,npm将会出错:
$ npm install --engine-strict