2016-09-16 60 views
2

我有兩個類,一個從另一個擴展。我需要有一個可以從擴展類調用,但解決路徑,以反映任何目錄的擴展類模塊是方法。在NodeJS中獲取所需模塊的路徑

/main.js

class Main { 

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

/一些/路徑/模塊。 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

/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); 
    } 
} 
+0

我正在做類似的事情。但是我想這樣做,如果可能的話,不必調用構造函數。 – cyberwombat

0

確定。我有一個工作哎呀hokey解決方案。

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 { 

}