如何检查npm软件包是否支持Node.js v0.8.x?

时间:2012-06-27 12:57:26

标签: node.js npm

我已经部署了0.6版本的Node.js,并为各种项目安装了相当多的软件包。

是否有直接的方法来检查使用NPM安装的所有软件包,看它们是否支持Node.js v 0.8.x?

我可以看到package.json文件应该说明它们用于什么版本的Node,虽然我猜测很多都不会包含这个 - 所以我真的只对这些包感兴趣说他们肯定与Node v 0.8.x兼容

e.g。他们在package.json中有这样的东西:

"engines": {
  "node": "<0.8.0"
},

"engines": {
  "node": "=0.6.*"
},

我只想要一个简单的不兼容软件包列表。

1 个答案:

答案 0 :(得分:4)

在应用程序的基本目录中尝试:

find . -name package.json -exec node -e 'var e = JSON.parse(require("fs").readFileSync(process.argv[1]))["engines"]; if (e && e.node) { var bad = false; if (e.node.match(/<\s*0\.[0-8]([^.]|\.0)/)) bad = true; if (e.node.match(/(^|[^>])=\s*0\.[^8]/)) bad = true; if (bad) console.log(process.argv[1], "appears no good (", e.node, ")") }' '{}' \;

翻译成正常风格:

var fs = require("fs");

var contents = fs.readFileSync(process.argv[1]);
var package = JSON.parse(contents);
var engines = package.engines;

if (engines && engines.node) {
    var node = engines.node,
        bad = false;

    if (node.match(/<\s*0\.[0-8]([^.]|\.0)/)) {
        // Looks like "< 0.8.0" or "< 0.8" (but not "< 0.8.1").
        bad = true;
    }

    if (node.match(/(^|[^>])=\s*0\.[^8]/)) {
        // Looks like "= 0.7" or "= 0.9" (but not ">= 0.6").
        bad = true;
    }

    if (bad) {
        console.log(process.argv[1], "appears no good (", node, ")");
    }
}

然后我们使用find在我们找到的每个package.json上运行此功能。

这是我在express-template.coffee包裹上运行时得到的结果:

./node_modules/jade/node_modules/commander/package.json appears no good ( >= 0.4.x < 0.8.0 )
./node_modules/mocha/node_modules/commander/package.json appears no good ( >= 0.4.x < 0.8.0 )
./node_modules/mocha/package.json appears no good ( >= 0.4.x < 0.8.0 )

似乎TJ有一个反对0.8的东西; - )