2017-09-25 6 views
0

でエクスポートクラスメソッドのグローバル変数を設定するには:は、どのように私はそうのように出て壊れて、複数の異なるファイルを持っているのNode.js

index.js 
utils.js 
ClassA/ 
    index.js 
    base.js 

utilsのどこでも使用されるユーティリティ機能の数が含まれています。 ClassA/index.jsにはClassAのコンストラクタが含まれていますが、base.jsが必要です。次にClassAをエクスポートします。 Base.jsは、ClassAのプロトタイプメソッドをエクスポートします。ここでは、彼らがどのように見えるか、基本的である:

//ClassA/index.js 
function ClassA() { 
    //constructor stuff 
} 
ClassA.prototype.constructor = ClassA; 
require('./base')(ClassA); 
module.exports = ClassA; 

//ClassA/base.js 
module.exports = ClassA => { 
ClassA.prototype.aMethod = function() { 
    log('hello'); 
} 

//utils.js 
module.exports = { 
    log : function (logText) { 
    //dostuff 
    } 
} 

だから私の問題は、私はClassA/base.jsのメソッド内からのログ機能にアクセスできないことです。ファイルの先頭にconst log = require('../utils').logを設定しても動作しません。エクスポートの中でメソッド定義の外に同じ行のコードを置くと動作しませんが、メソッド自体の中に置くとうまくいきます(期待通りですが、これはすべてのrequireステートメントをそれが必要な方法)。この乱雑で反復的なルートを使用する方法はありますか?

+0

これは循環依存関係の問題です。恐らくhttps://stackoverflow.com/questions/10869276/how-to-deal-with-cyclic-dependencies-in-node-jsの複製ですが、私は料理を終える:D –

+0

ああ、あなたは正しい。私はいくつかの調査を行い、それを避けるためにリファクタリングの推奨経路を取った。ありがとう! – Beckleyc

答えて

0

これは循環依存性の問題でした。私はClassAの方法になるように 'ログ'を変更し、これが問題を解決しました。 Francois P.のおかげで私は正しい方向に向いています。

+0

申し訳ありませんが、答えを書く時間がありませんでした:) –

関連する問題