我有两个类,一个从另一个扩展。我需要一个可以从扩展类调用的方法,但是解析路径以反映扩展类模块所在的目录。
/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'路径。
我玩过require.resolve
,但我不知道如何在模块中使用它。
答案 0 :(得分:0)
/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);
}
}
答案 1 :(得分:0)
确定。我有一个工作唉解决方案。
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 {
}