3

我有一个与多个应用程序共享的 requirejs 配置。加载应用程序时,应用程序会收到一个包含应用程序布局(以及各种其他参数)的对象。我想使用该对象为应用程序定义模块/包。

siteMap = { modules: { "foo": { … }, "bar": { … }, … }, other: "stuff" }

/shared/
  libs/
    bootstrap.js
    jquery.js
    …
  app.js

/$appName/
  foo/
    index.html
    edit.html
    main.js
  bar/
    index.html
    stuff.html
    main.js
  …

我想必须有一种方法可以添加如下所示的包:

// /shared/app.js
require.config({
  paths: {
    "bootstrap": ["//hosted.bootstrap.js","/shared/libs/bootstrap.js"],
    "jquery":    ["//hosted.jquery.js","/shared/libs/jquery.js"],
    "siteMap":   "//appName.example.com/api/siteMap"
  },
  …
});

require(['jquery','siteMap','bootstrap'], function($,siteMap) {
  for ( var module in siteMap.modules )
  {
    require.config.packages[module] = siteMap.modules[module];
    // OR
    require.addPackage(siteMap.modules[module]);
  }
});
4

1 回答 1

3

require()在 siteMap 告诉您应该加载什么之后,您可以嵌套另一个调用以加载其他模块。像这样的东西:

require(['jquery','siteMap','bootstrap'], function($,siteMap) {
    // .map assumes modern browser or use of something like es5-shim
    var modulesToLoad = siteMap.modules.map(function(m) { return m + '/main'; } );
    require(modulesToLoad, function() {
        // kick off the rest of app logic
    });
});
于 2013-08-28T19:23:42.253 回答