是否可以使用require.js将模块* .js文件设置为依赖项

时间:2012-12-03 08:54:19

标签: javascript requirejs amd

我们不使用require.js在js源上实现模块,但我想将它用于测试。并且存在一个问题:我无法将raw * .js文件实现为其他模块的依赖项。有可能吗?

我的意思是:在它之后加载一些* .js文件和模块(进行测试)。

1 个答案:

答案 0 :(得分:2)

define如何运作

我将require.js用于实现和测试。您可以使用define在执行模块函数之前将任何JavaScript文件作为依赖项加载。

define(["test/myTest.js", "test/anotherTest.js"], function(test1, test2) {
  // perform your tests
});

如何将requirejs与asyncTests

一起使用

使用require 依赖 模块函数后,您还可以加载代码。我将它与 QUnit 一起使用。这是我的代码中的一个例子。

首先,确保默认情况下停止QUnit测试运行器(这与其他测试框架类似)。这样,您可以定义何时运行测试(即在您加载相关代码之后)。

QUnit.config.autostart = false

其次,您将测试定义为模块。模块加载依赖项,然后定义测试,然后加载要测试的代码。只有在代码自行执行且无法预先加载时才需要这样做(在这种情况下,您可以使用define并完成它)。以下是使用Chaplin库(用CoffeeScript编写)的示例。

define(['chaplin'], function(chaplin) {
  asyncTest("publish startup complete event", function() {
    chaplin.mediator.subscribe("startup~complete", function() {
      ok(true, "startup~complete event fired");
    });
    return requirejs(['modules/startup/startup'], function() {
      start();
    });
  });
});

重要的部分是最后一次requirejs电话。它在定义测试后加载要测试的代码。

动态加载依赖项

编辑:回应评论 假设存在一个名为config的模块,其中包含配置数据。我也假设某种格式,所以如果你的格式不同,你可能会做一些小改动。这些原则是正确的。

define(["config"], function(config) {
  // assuming config.modules is an array of all development modules,
  // config.devPath is the base bath to development modules,
  requirejs(
    config.modules.map(function(module){
      return config.devPath + module
    })
  , function() {
    // all modules loaded, now go on
    // however, no reference to modules left, so need to work with `arguments` array
  });
});

但是,您应该知道在回调函数中丢失了对模块的引用。