Require.js如何缩小部分应用程序?

时间:2014-07-09 00:32:36

标签: javascript backbone.js requirejs

我有一个很大的应用程序,它使用Backbone + vanilla AMD模块。通常我会用一个笨拙的任务来缩小一切,但这是特定的场景。把它想象成一个窗口管理器。

此应用程序将

  • 主应用程序(窗口管理器)
  • 示例应用(由我们撰写)
  • 更多应用(由用户提交)

是否有一种模式可以缩小WindowManagerApp和每个demo +用户应用程序,但在页面加载时只能加载WindowManagerApp并使用Require.js提供的正常异步机制加载其他应用程序?

我们的理由是,并非所有用户都会使用他们可用的所有应用,因此我们不想缩小并为所有用户提供服务(是的,可能只有几MB)

1 个答案:

答案 0 :(得分:1)

您可以使用嵌套需求创建多个缩小图层并延迟加载应用。以下只是嵌套需求的一个示例,而不是您应该如何执行此操作。

使用RequireJS' example build file,请注意每个"模块"是一个构建层。

modules: [
  { 
    name: "WindowManagerApp" 
  },
  { 
    name: "demoLayer",
    include: ["demo/apps1", "demo/apps2"],
    exclude: ["WindowManagerApp"]
  },
  { 
    name: "userLayer",
    include: ["user/apps1", "user/apps2"],
    exclude: ["WindowManagerApp"]
  }]

您可以使用exclude值创建多个图层,确保它们不会在其依赖项中重叠。

然后,您可以使用嵌套需求加载其他图层,然后加载特定应用

require(["WindowManagerApp","require"], function(manager, require){
  manager.init();
  // ...
  var loader = {
    loadDemos: function(){
      require(["require", "demoLayer"], function(require){
        require(["demo/apps1"], function(app1){
          // Do your stuff
        }
      }
    }
  }
});

在致电loader.loaderDemos()之前,演示层不会加载。