Nam Nguyen
Nam Nguyen

Reputation: 5750

Get application full path in Node.js

I'm wondering if there is a best way or best practice to get the full path of application in Node.js. Example: I have a a module in sub folder /apps/myapp/data/models/mymodel.js, and I would like to get the full path of the app (not full path of the file), which will return me /apps/myapp, how do I do that? I know _dirname or _file is only relative to the file itself but not the full path of the app.

Upvotes: 14

Views: 25865

Answers (2)

Laurent Perrin
Laurent Perrin

Reputation: 14881

There's probably a better solution, BUT this should work:

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: Andreas proposed a better solution in the comments:

path.dirname(require.main.filename)

EDIT: another solution by Nam Nguyen

path.dirname(process.mainModule.filename)

Upvotes: 27

C B
C B

Reputation: 13314

This worked for me.. With supervisor running the app from a different dir.

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

example.. files: /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

Upvotes: 3

Related Questions