定义模块并使用RequireJS立即使用它们

时间:2012-01-16 13:48:55

标签: javascript module requirejs amd

我正在为使用RequireJS的应用程序编写一些测试。由于应用程序的工作方式,它希望通过调用require来获取一些类。因此,对于测试,我有一些虚拟类,但我不想将它们放入单个文件中,仅用于此测试。我更喜欢在我的测试文件中手动define(),如下所示:

define('test/foo', function () {
    return "foo";
});

define('test/bar', function () {
    return "bar";
});

test("...", function () {
    MyApp.load("test/foo"); // <-- internally, it calls require('test/foo')
});

这里的问题是这些模块的评估会被延迟,直到脚本onload事件被触发为止。

  

来自require.js around line 1600

//Always save off evaluating the def call until the script onload handler.
//This allows multiple modules to be in a file without prematurely
//tracing dependencies, and allows for anonymous module support,
//where the module name is not known until the script onload event
//occurs. If no context, use the global queue, and get it processed
//in the onscript load callback.
(context ? context.defQueue : globalDefQueue).push([name, deps, callback]);

我是否可以通过某种方式手动触发要评估的队列?

2 个答案:

答案 0 :(得分:1)

到目前为止,我发现的最好的是异步需要模块:

define("test/foo", function () { ... });
define("test/bar", function () { ... });

require(["test/foo"], function () {
    var foo = require('test/foo'),
        bar = require('test/bar');
    // continue with the tests..
});

答案 1 :(得分:0)

模块定义应限制为每个文件一个(参见here)。我猜想在单个文件中定义多个模块会破坏内部加载机制,这依赖于脚本的加载事件来确定它在解析依赖项时已准备就绪。

即使它只是用于测试,我建议将这些定义分成多个文件。

希望有所帮助!欢呼声。