プロジェクトルートでpackage.json
ファイルを取得する以外に、実行中のnode.jsアプリケーションの依存関係のリストを特定する方法はありますか?ノードはこのメタ情報をグローバル名前空間内のいくつかのvarとして利用可能にしますか?実行中のnode.jsアプリケーションから使用されるNPMモジュールを確認する
答えて
あなただけのアプリケーションディレクトリに現在インストールされている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
は、私はあなたがrequire-analyzer、Isaacsに応じて作品の並べ替えを(一部を欠場する可能性が)使用することができます信じています。 Nodeup's first podcastの11:55からこれを聞くことができます。
またはJamesのnode-detectiveを試してみてください。これはおそらく依存関係をより良く(ただしコードを実行することなく)見つけることができますが、Javascriptの動的性質(12:46)のためです。
探偵
すべてのコールは関係なく、夢中になってASTの 適切な歩行を使用して入れ子になったか()を必要としないために検索。
PS:あなたをNode.jsのために、これらのpackage.json変数を露出させるためには、node-pkginfo
を使用することができますこれはworkable.I'mは誰にも提案を持っているかどうかを確認するために少し長くのための未解決の問題を残していくに見えます。ありがとう! – MrEvil
node.js IRCチャンネルにも質問する価値があります。http://nodejs.org/community/ –