当它在nodejs中的不同文件中时,如何获取调用方法的dirname?

dei*_*tch 21 node.js

假设我有两个文件,dir/a.js并且lib/b.js

a.js:

b = require('../lib/b');
b.someFn();
Run Code Online (Sandbox Code Playgroud)

b.js:

var fallback = "./config.json";
module.exports = {
  someFn = function(jsonFile) {
    console.log(require(jsonFile || fallback);
  }
}
Run Code Online (Sandbox Code Playgroud)

b.js这个例子的全部目的是读取一个json文件,所以我可以称之为b.someFn("path/to/file.json").

但我希望有一个默认值,如配置文件.但是默认的应该是相对于a.js而不是b.js.换句话说,我应该可以打电话b.someFn()a.js它,它应该说,"既然你没有把我的路径传给我,我会假设一条默认路径config.json." 但是默认应该是相对的a.js,即应该是,dir/config.json不是 lib/config.json,如果我这样做,我会得到require(jsonFile).

我可以得到cwd,但只有从内部启动脚本才会有效dir/.

有没有办法b.js说,在里面someFn(),"给我一个__dirname叫我的功能?"

Lau*_*rin 32

使用callsite,然后:

b.js:

var path = require('path'),
    callsite = require('callsite');

module.exports = {
  someFn: function () {
    var stack = callsite(),
        requester = stack[1].getFileName();

    console.log(path.dirname(requester));
  }
};
Run Code Online (Sandbox Code Playgroud)

  • 太好了!我喜欢! (2认同)