Получить полный путь приложения в Node.js

Мне интересно, есть ли лучший способ или лучшая практика, чтобы получить полный путь приложения в Node.js. Пример: у меня есть модуль в подпапке /apps/myapp/data/models/mymodel.js, и я хотел бы получить полный путь к приложению (не полный путь к файлу), который вернет мне /apps/myapp, как мне это сделать? Я знаю, что _dirname или _file относится только к самому файлу, но не к полному пути к приложению.

Ответ 1

Вероятно, лучшее решение, НО, должно работать:

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);

EDIT: Андреас предложил лучшее решение в комментариях:

path.dirname(require.main.filename)

EDIT: другое решение Nam Nguyen

path.dirname(process.mainModule.filename)

Ответ 2

Это сработало для меня.. С супервизором, запускающим приложение из другого каталога.

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

пример.. файлы: /Настольные/я/ 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