6

package.jsonプロジェクト ルートでファイルを取得する以外に、実行中の node.js アプリケーションの依存関係のリストを特定する方法はありますか? ノードは、このメタ情報をグローバル名前空間の変数として使用できるように保持しますか?

4

2 に答える 2

6

アプリケーション ディレクトリに現在インストールされている 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
于 2012-04-22T09:44:27.690 に答える
2

Isaacsによれば、require-analyzerを使用できると思います(一部見逃す可能性があります)。これは、11:55 からの Nodeup の最初のポッドキャストで聞くことができます。

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

探偵

AST の適切なウォークを使用して、require() へのすべての呼び出しを見つけます。

PS: これらの package.json 変数を node.js に公開するには、 node-pkginfo を使用できます。

于 2012-04-23T01:01:54.360 に答える