为不同的模块使用不同的配置选项

时间:2014-10-18 15:22:43

标签: requirejs

在我的require.js配置中,我使用urlArgs: "bust=" + (new Date()).getTime(),来确保在开发过程中根本没有缓存我的模块脚本(这会为每个请求添加唯一的查询参数,所以它看起来像一个不同的资源缓存。)

但是,我使用的是几个第三方库,我根本没有改变,并且希望对它们进行缓存以加快加载和整个开发周期。有没有办法只将缓存破坏配置应用于某些模块,例如基于路径?

1 个答案:

答案 0 :(得分:1)

urlArgs选项is used by the nameToUrl method of requirejs' context。这意味着在上下文中,所有模块都将共享该选项。 Different contexts can have different options,但混合上下文比它的价值更麻烦:它不足以定义两组配置选项,但不同的模块必须以不同的方式需要,模块来自不同的上下文不能列在单个依赖列表中。

尽管如此,这是一个如何实现这一目标的例子(fiddle):

// default context
require.config({
    urlArgs: "boost=" + (new Date()).getTime(),
    paths: {
        jquery: "//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min",
    }
});

// cached (non-boosted) context
var reqCached = require.config({
    context: "cached",
    paths: {
        jquery: "//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min",
    }
});

// define a module "inline", normally it'll go into <base>/main.js
define("main", ["jquery"], function($) {
    $("body").append("<div>boosted jquery</div>");
    reqCached(["jquery"], function($) {
        $("body").append("<div>cached jquery</div>");
    });
});

// bootstrap the "application" - load and execute the main module
requirejs(["main"], function(main) {
});

在开发人员工具中,你可以看到这个人为的例子加载了两个版本的jquery - 一个缓存提升(&#34; main&#34;模块的依赖关系)和一个普通(用{{1}手动需要) } context)。唉,不可能 - 或者我不知道某种方式 - 混合和匹配这两种情境,以便透明地提供不同的模块集。