5

Node.js のバージョン 0.6 をデプロイし、さまざまなプロジェクト用に多数のパッケージをインストールしました。

NPM を使用してインストールされたすべてのパッケージをチェックして、Node.js v 0.8.x をサポートしているかどうかを確認する簡単な方法はありますか?

package.jsonファイルには Node のバージョンが記載されているはずですが、多くのファイルにはこれが含まれていないと推測されます。。バツ

たとえば、package.json には次のようなものがあります。

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

また

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

互換性のないパッケージの簡単なリストが欲しいだけです。

4

2 に答える 2

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 に反対しているようです ;-)

于 2012-06-27T13:20:50.690 に答える