2016-12-22 4 views
0

アプリケーションが現在のノードモジュール(つまりnode my.jsの場合はrequire('package.json').name)から起動されたときにpackage.jsonからデータを取得できることはわかっています。現在実行中のアプリケーションの名前とバージョンはどのように取得できますか?

しかし、私は現在のアプリケーションに関する情報を別のモジュールから取り出すことができますか? (つまり、アプリケーションが起動され、自分のモジュールが必要なモジュールが必要です)。その場合は、ルートアプリケーションが何であるかを知る必要があります。

この情報を取得する最も効率的かつ正確な方法は何でしょうか?

+0

これについていくつかの議論がありました。私はあなたがファイル記述子(package.json)をモジュールから得る方法を探していると思います、そうですか? –

+0

@CelsoAgraはそれほどではありません(これが別のプロジェクトにとって便利な場合でも)。私が必要とするのは、アプリケーションを元々実行しているモジュールを見つける方法です。私はより明確に私の質問を編集しました。 – Coyote

答えて

1

あなたが探している解決策があるかどうかわかりません。私が見てきたように、モジュールについていくつかのファイル記述子を取得しようとしています。

おそらく、現在のファイルディスクリプタをどのモジュールからも取得する必要があります。私はrequire('module')に関するいくつかの情報を見ました。それはそれに役立つことがあります。

_resolveLookupPathsおよび_resolveFilenamelinkは有用な方法である。残念ながら、2番目の方法はグローバルな依存関係のためだけに機能します。したがって、ローカルの依存関係は考慮されません。

私はこのコードはモジュールのフルパスを取得するためにあなたを助けることができます信じて:あなたは、このメソッドを実行するとき

// my own file descriptor 
var packageJson = require('./package.json'); 
console.log(packageJson); 

// module file descriptor 
var moduleName = 'mongoose'; // change module name 
var modulePath = require('module')._resolveLookupPaths('./'); 
var moduleDescriptor = require(modulePath[1][1] + '/' + moduleName + '/package.json'); 
console.log(moduleDescriptor.version); 

var modulePath = require('module')._resolveLookupPaths('./'); 

を出力は常に同じです:

[ './', 
    [ '.', 
    '/home/<username>/<folder>/<sub-folder>/node_modules', 
    '/home/<username>/<folder>/node_modules', 
    '/home/<username>/node_modules', 
    ... ] ] 

私の完全なパスは modulePath[1][1] です任意のローカルモジュールの実際のパスを作成できます。しかし、これは、モジュールのファイル記述子情報を取得するための最良の方法であるのか正式な方法なのかは分かりません。

編集:

は多分これはあなたを助けることができる:

// index.js 
require('mymodule').init(); 

ノードモジュールで:

// node_modules/mymodule/index.js 
module.exports.init = function() { 
    var pack = require(process.cwd() + '\\package.json'); // I'm running on windows!! 
    console.log(pack.version); // output 1.0.0 
} 

出力は(私のモジュールを呼び出しているアプリに応じて)されます:

// 1.0.0 
+0

私が持っている主な問題は、私が探しているモジュールがわからないことです。他のどのモジュールでも使用できる私のモジュールは、どのアプリケーションがそれを使用しているのかを知る必要があります。 – Coyote

+0

おそらく 'process.cwd()'メソッドが役に立ちます –

+0

実際にはprocess.cwd()が動作することがあります。 – Coyote

関連する問題