2012-04-22 4 views

答えて

6

あなただけのアプリケーションディレクトリに現在インストールされているNPMパッケージを探しているなら、あなたはnpmパッケージ(npm install -g npm)とprogramaticallyがインストールされたパッケージとの依存関係ツリーを一覧表示するlsを呼び出してインストールすることができます。

明らかに、インストールされたパッケージがアプリケーション内に実際にrequireであるかどうかは関係ありません。

使用方法については十分に文書化されていませんが、これを開始する必要があります。

var npm = require('npm'); 

npm.load(function(err, npm) { 
    npm.commands.ls([], true, function(err, data, lite) { 
     console.log(data); //or lite for simplified output 
    }); 
}); 

例えば:

{ dependencies: 
    { npm: { version: '1.1.18', dependencies: [Object] }, 
    request: { version: '2.9.202' } } } 

そうでなければ、私は唯一の他のオプションは、現在ロードされている/キャッシュされたモジュールパスに関する情報を取得するためにmoduleモジュールをイントロスペクトすることであると信じています。しかし、これは間違いなく公開APIとして開発されているように見えません。私は何か選択肢があるかどうか分からないので、もし存在すれば聞くことが大切です。

var req = require('request'); // require some module for demo purposes 
var m = require('module'); 

// properties of m contain current loaded module info, e.g. m._cache 
+0

を使用することができますこれはworkable.I'mは誰にも提案を持っているかどうかを確認するために少し長くのための未解決の問題を残していくに見えます。ありがとう! – MrEvil

+0

node.js IRCチャンネルにも質問する価値があります。http://nodejs.org/community/ –

2

は、私はあなたがrequire-analyzerIsaacsに応じて作品の並べ替えを(一部を欠場する可能性が)使用することができます信じています。 Nodeup's first podcastの11:55からこれを聞くことができます。

またはJamesのnode-detectiveを試してみてください。これはおそらく依存関係をより良く(ただしコードを実行することなく)見つけることができますが、Javascriptの動的性質(12:46)のためです。

探偵

すべてのコールは関係なく、夢中になってASTの 適切な歩行を使用して入れ子になったか()を必要としないために検索。

PS:あなたをNode.jsのために、これらのpackage.json変数を露出させるためには、node-pkginfo