2016-09-16 5 views
2

私は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

[OK]をクリックします。私は幸運な解決策を得ています。

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 { 

} 
関連する問題