获取NodeJS

时间:2016-09-16 06:05:48

标签: node.js

我有两个类,一个从另一个扩展。我需要一个可以从扩展类调用的方法,但是解析路径以反映扩展类模块所在的目录。

/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,但我不知道如何在模块中使用它。

2 个答案:

答案 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 {

}