在NodeJS中获取所需模块的path

我有两个class,一个从另一个扩展。 我需要一个可以从扩展类调用的方法,但parsingpath来反映扩展类模块所在的任何目录。

/main.js

class Main { getTemplate () { return readFileSync(__dirname + './template.ejs') } } 

/some/path/module.js(也包含/some/path/template.ejs)

 class Module extends Main { } 

在主代码中

 const m = new Module() m.getTemplate() // /some/path/template.ejs 

上述不起作用,因为__dirname不反映“module.js”path。

我玩过require.resolve但我不知道如何在模块中使用它。

/main.js

 class Main { constructor(dirname) { this.dirname = dirname; } getTemplate () { return readFileSync(this.dirname + './template.ejs') } } 

/some/path/module.js(也包含/some/path/template.ejs)

 class Module extends Main { constructor() { super(__dirname); } } 

好。 我有一个工作哎呀hokey解决scheme。

 class Main { constructor () { try { throw new Error() } catch(e) { const m = e.stack.match(/at new \w+ \(([^:]+)/) this.dirname = path.dirname(m[1]) } } getTemplate () { return readFileSync(this.dirname + '/template.ejs') } } class Module extends Main { }