13

Node.jsでアプリケーションのフルパスを取得するための最良の方法またはベストプラクティスがあるかどうか疑問に思っています. 例: サブ フォルダー/apps/myapp/data/models/mymodel.jsにモジュールがあり、アプリのフル パス (ファイルのフル パスではない) を取得したい場合、/apps/が返されます。 myapp、どうすればいいですか? _ dirnameまたは__fileは、ファイル自体に対してのみ相対的であり、アプリの完全なパスではありません。

4

2 に答える 2

27

おそらくより良い解決策がありますが、これはうまくいくはずです:

var path = require('path');

// find the first module to be loaded
var topModule = module;

while(topModule.parent)
  topModule = topModule.parent;

var appDir = path.dirname(topModule.filename);
console.log(appDir);

編集:アンドレアスはコメントでより良い解決策を提案しました:

path.dirname(require.main.filename)

編集:Nam Nguyenによる別の解決策

path.dirname(process.mainModule.filename)
于 2013-09-04T17:44:35.737 に答える
3

これは私にとってはうまくいきました.スーパーバイザーが別のディレクトリからアプリを実行しています。

require('path').dirname(Object.keys(require.cache)[0])

例.. ファイル: /desktop/ya/node.js

  require('./ya2/submodule')();

/desktop/ya/ya2/submodule.js

module.exports = function(){
    console.log(require('path').dirname(Object.keys(require.cache)[0]))
}

$ node node.js  
       => /desktop/ya

$ (from /desktop) supervisor ya/node.js
       => /desktop/ya
于 2013-09-04T21:41:50.783 に答える