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
我们有一个 Nodejs + Express 应用程序,并且希望仅当 npm -v
等于 process.env.npm_package_engines_npm
时强制应用程序成功 运行 npm install
,这是package.json
这有可能吗?
此要求的原因是为了 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