从节点脚本获取已安装的 npm 版本?

mai*_*mic 10 node.js npm

我在构建脚本中检查全局安装的 Node 版本:

var semver = require('semver');
var packageJson = require('./package.json');
var expectedVersion = packageJson.engines.node;

var actualVersion = process.version;
if (semver.neq(expectedVersion, actualVersion)) {
  fail('Incorrect Node version: expected ' + expectedVersion + ', but was ' + actualVersion);
}
Run Code Online (Sandbox Code Playgroud)

我想以类似的方式检查全局安装的 npm 版本。如何检索全局安装的 npm 版本?

Bra*_*ith 10

这并不漂亮,但这可以解决问题:

var exec = require('child_process').exec,
npmVersion;

exec('npm -v',
  function (error, stdout, stderr) {
    npmVersion = stdout;
});
Run Code Online (Sandbox Code Playgroud)

请注意,它是异步的,因此您必须在回调中进行 npm 比较,但 stdout 中包含的值应该是 semver 的有效输入。


小智 5

可以简单地这样做。

const { execSync } = require('child_process');

const actualNpmVersion = execSync('npm -v').toString().trim();

const expectedNpmVersion = require('./package.json').engines.npm;

if (!semver.satisfies(actualNpmVersion, expectedNpmVersion)) {
  fail('Incorrect npm version: expected ' + expectedNpmVersion + ', but was ' + actualNpmVersion);
}
Run Code Online (Sandbox Code Playgroud)