连接RequireJS中的模块

时间:2014-10-14 10:43:50

标签: javascript requirejs grunt-contrib-requirejs

我正在使用RequireJS来模块化我的代码。我使用的网站将有几个不同的页面类别。对于它们中的每一个,我想加载包含所有页面类别中存在的所有依赖项的通用JS文件,jQuery是最明显的一个。我已经设法做到了。

对于其余页面,我想要单独的JS文件。每个页面都有自己的模块,但我认为如果我一次下载多个页面模块会更有意义,这样当用户访问其他页面时,他将已经缓存了JS文件而不必下载。

现在我尝试连接这些模块,这些模块运行得相当好。但是,我不确定如何从文件加载特定模块。到目前为止,我这样做:

require(['./js/common'], function (common) {
    require(['public']);
});

common是依赖项文件,public是我的连接文件,包含所有依赖项。里面有每个页面的模块,但我不知道如何调用特定的。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

看看require-lazy

它允许您将应用程序的独立部分捆绑到单独的包中。从开发人员的角度来看,而不是:

define(["module1", "module2"], function(module1, module2) {...});
你写道:

define(["lazy!module1", "lazy!module2"], function(module1, module2) {...});

模块1& 2不会预先加载;当你打电话时,他们和他们的依赖关系将被加载:

module1.get().then(function(realModule1) {
    // here you have access to the real module1
});

查看一些用例的示例。

答案 1 :(得分:1)

查看RequireJS'运行时配置的bundles选项。在你的情况下,它将是这样的:

bundles: {
    public: ['mod1', 'mod2', ...] 
}

我使用了mod1mod2,因为我没有看到你问题中实际模块的名称,但是你想要的是{{{{{{ 1}}捆绑和您想要单独加载。有了这个,RequireJS会知道当你想加载这样的模块时,它必须从public获取它们,而不是单独搜索它们。

然后您应该可以将加载代码更改为:

public

同样,require(['./js/common'], function (common) { require(['mod1']); }); 仅供参考。