package.json
プロジェクト ルートでファイルを取得する以外に、実行中の node.js アプリケーションの依存関係のリストを特定する方法はありますか? ノードは、このメタ情報をグローバル名前空間の変数として使用できるように保持しますか?
2 に答える
アプリケーション ディレクトリに現在インストールされている npm パッケージを探しているだけの場合は、npmパッケージ ( npm install -g npm
) をインストールし、プログラムで呼び出し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
Isaacsによれば、require-analyzerを使用できると思います(一部見逃す可能性があります)。これは、11:55 からの Nodeup の最初のポッドキャストで聞くことができます。
または、James node-detectiveを試すこともできます。これは、Javascript の動的な性質のため (12:46)、おそらく依存関係をより適切に見つけることができます (ただし、コードを実行することによってではありません)。
探偵
AST の適切なウォークを使用して、require() へのすべての呼び出しを見つけます。
PS: これらの package.json 変数を node.js に公開するには、 node-pkginfo を使用できます。