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

时间:2015-12-31 15:35:35

标签: 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);
}

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

2 个答案:

答案 0 :(得分:4)

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

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

exec('npm -v',
  function (error, stdout, stderr) {
    npmVersion = stdout;
});

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

答案 1 :(得分:1)

如果通过"类似的方式"你的意思是检查npm的package.json文件,然后你必须知道它所在的文件系统的位置。这意味着知道如何安装npm:它可以通过管理工具,如nvmn,也可以通过您的操作系统'软件安装工具或软件包管理器,或者它可以只是在任意目录中。

最简单的做法可能是跳过尝试查找npm的package.json文件,而只是使用node的内置Child Process模块来执行npm -v和捕获变量中的输出,然后使用semver进行必要的比较。