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

我在我的构build脚本中检查全局安装的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版本?

这不是很漂亮,但是这样做会有诀窍:

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

请注意,它是asynchronous的,所以你必须在callback中进行npm比较,但是stdout中包含的值应该是semver的有效input。

如果用“类似的方式”表示检查npm的package.json文件,那么你将不得不知道它所在的文件系统的位置。 这意味着知道如何安装npm:可以通过nvmn等pipe理工具,也可以通过您的操作系统的软件安装工具或软件包pipe理器,或者它可以只是在一个任意的目录。

可能最简单的做法是跳过试图findnpm的package.json文件,而只是使用节点的内置subprocess模块来执行npm -v并捕获variables中的输出,然后使用semver进行必要的比较。