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

我有一个Node.js的部署版本0.6,为各种项目安装了大量的软件包。

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

我可以看到,package.json文件应该说明它们的版本是什么,但我猜测很多人不会包含这个 – 所以我真的只对那些声称与Node v0.8 兼容的软件包感兴趣。X

例如他们在package.json中有这样的东西:

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

要么

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

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

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

 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在每个我们可以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的东西;-)