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