0

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

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

现在我尝试连接这些确实工作得很好的模块。但是,我不确定如何从文件中加载特定模块。到目前为止,我正在这样做:

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

common 是依赖项文件,public 是我的所有依赖项的串联文件。它里面有每个页面的模块,但我不知道如何调用特定的模块。有任何想法吗?

4

2 回答 2

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

查看一些用例的示例。

于 2014-10-14T12:21:07.350 回答
1

看看bundlesRequireJS 运行时配置的选项。在您的情况下,它将类似于:

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

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

然后您应该能够将加载代码更改为:

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

再次,mod1是为了说明。

于 2014-10-14T16:34:19.303 回答