【问题标题】:Get application full path in Node.js在 Node.js 中获取应用程序完整路径
【发布时间】:2013-09-06 12:44:35
【问题描述】:

我想知道是否有最佳方式或最佳实践来获取 Node.js 中应用程序的完整路径。示例:我在子文件夹 /apps/myapp/data/models/mymodel.js 中有一个模块,我想获取应用程序的完整路径(不是文件的完整路径),这将返回我 /apps/myapp,我该怎么做?我知道 _dirname_file 仅相对于文件本身,而不是应用程序的完整路径。

【问题讨论】:

  • 我找到了自己的答案:path.dirname(process.mainModule.filename)

标签: 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);

编辑:Andreas 在 cmets 中提出了一个更好的解决方案:

path.dirname(require.main.filename)

编辑:Nam Nguyen 的另一个解决方案

path.dirname(process.mainModule.filename)

【讨论】:

  • woo.. 我没想到会这么复杂,但我会试试的,谢谢。
  • path.dirname(require.main.filename) 应该做同样的事情。请注意,如果您通过另一个应用程序(pm2、forever 或 mocha 是常见情况)运行该应用程序,此(以及 OP 的)解决方案将失败。
  • 如果你想把这个变成一个函数,放在一个单独的地方(比如common.js),就会有一个问题:你需要知道common.js的位置(相对到当前文件),以便您可以使用require('common.js')。实际上__dirname 永远不会很好地解决问题。我认为在 nodejs 应用程序中,文件应该知道它们在哪里,根本不需要根路径。
  • 是的,console.log(require('path').dirname(require.main.filename));作品。谢谢大家!
  • 我还找到了另一个解决方案:require('path').dirname(process.mainModule.filename)
【解决方案2】:

这对我有用。主管从不同的目录运行应用程序。

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

【讨论】:

  • 我还找到了另一个解决方案:require('path').dirname(process.mainModule.filename)
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 2010-10-30
  • 2017-03-16
  • 1970-01-01
相关资源
最近更新 更多