我正在为使用RequireJS的应用程序编写一些测试。由于应用程序的工作原理,期望通过调用require
来获得一些类。所以,为了测试,我有一些虚拟类,但我不想将它们放入单个文件中,仅用于此测试。我更喜欢只define()
他们手动在我的测试文件像这样:定义模块并立即使用它们RequireJS
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事件被触发。
//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]);
有一些方法我可以手动触发队列进行评估?
您可以添加每个文件多个模块(当你优化+运行如下整个应用程序考虑),你只需要给每个模块一个特定的名字(参见OP中每个'define'函数的第一个字符串参数)。 – nickf 2012-01-16 18:17:08
此外,这些模块仅用于测试,它们非常**基本。比上面的例子稍微复杂一些,但不是很多。将每个文件放在自己的文件中会太麻烦。 – nickf 2012-01-16 18:18:17
当然,我明白了。但从我可以从文档中知道的情况来看,在具有多个模块的单个文件的唯一情况下是在优化/构建步骤发生之后。说实话,我不熟悉requirejs,但是我已经将它用于几个项目。但文档非常清晰:'磁盘上每个文件只能有一个*模块定义。这些模块可以通过优化工具分组到优化的捆绑包中。'我会从那里开始:) – keeganwatkins 2012-01-16 18:34:08