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知道foo里面的变量main-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 值(一个字符串)将按值传递,所以它undefined在 other-module 中。您可以使用通过引用传递的选项对象:

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

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