Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定义模块并立即与RequireJS一起使用_Javascript_Module_Requirejs_Amd - Fatal编程技术网

Javascript 定义模块并立即与RequireJS一起使用

Javascript 定义模块并立即与RequireJS一起使用,javascript,module,requirejs,amd,Javascript,Module,Requirejs,Amd,我正在为使用RequireJS的应用程序编写一些测试。由于应用程序的工作方式,它希望通过调用require获得一些类。所以,对于测试,我有一些虚拟类,但我不想为了这个测试而把它们放在单独的文件中。我更喜欢在我的测试文件中手动定义它们,如下所示: define('test/foo', function () { return "foo"; }); define('test/bar', function () { return "bar"; }); test("...", fun

我正在为使用RequireJS的应用程序编写一些测试。由于应用程序的工作方式,它希望通过调用
require
获得一些类。所以,对于测试,我有一些虚拟类,但我不想为了这个测试而把它们放在单独的文件中。我更喜欢在我的测试文件中手动定义它们,如下所示:

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

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

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

是否有某种方法可以手动触发要评估的队列?

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

即使只是为了测试,我还是建议将这些定义拆分为多个文件


希望有帮助!干杯。

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

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..
});

您可以为每个文件添加多个模块(当您优化并缩小整个应用程序时请考虑),您只需为每个模块指定一个特定的名称(请参阅OP中每个
define
函数的第一个字符串参数)。此外,这些模块仅用于测试,它们非常基本。比上面的例子稍微复杂一点,但不多。把每一个都放在自己的文件里太乱了。当然,我理解。但从文档中我可以看出,只有在优化/构建步骤完成后,才有一个文件包含多个模块。老实说,我对requirejs不太熟悉,但我已经在几个项目中使用过它。但是文档非常清楚:“磁盘上每个文件应该只有一个模块定义。优化工具可以将模块分组到优化包中。“我从这里开始:)是的,优化工具只是将它们放在一个文件中,包装在这样的定义调用中,但一旦大型脚本完成加载,就会对模块进行评估。在我的情况下,我需要让它在那之前评估它。
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..
});