在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 { }