1

私はCommonJSモジュールを持っています:

// main-module
module.exports = function () {
  var foo,
      someModule = require('other-module')(foo);

  // A value is given to foo after other-module has been initialised
  foo = "bar";
}

ご覧のとおり、これには次のものが必要other-moduleです。

// other-module.js
module.exports = function (foo) {
  function example() {
    console.log(foo);
    // > "bar"
  }
}

モジュールが必要になった後に確立されたとしても、内のexample関数が 内の変数をother-module認識できるようにしたいと思います。foomain-module

other-module実行すると、 になりfooませんundefined。ただし、ポイントは、example関数が実行fooされるまでに、 の値が与えられるということですbar

上記のパターンは明らかに機能しません。どの設計パターンを実装する必要がありますか?

4

2 に答える 2

2

私は CommonJS にあまり詳しくないので、これは慣用的な方法ではないかもしれませんが、変数の代わりに関数を使用するとうまくいくはずです。

// main-module
module.exports = function () {
  var foo,
      someModule = require('other-module')(function() { return foo; });

  foo = "bar";
}

// other-module.js
module.exports = function (fooFn) {
  function example() {
    console.log(fooFn());
  }
}
于 2013-02-25T23:56:04.757 に答える
0

foo 値 (文字列) は値渡しされるため、undefinedother-module 内にあります。参照によって渡されるオプション オブジェクトを使用できます。

var options = {},
someModule = require('other-module')(options);

options.foo = "bar";
于 2013-02-25T23:56:56.150 に答える