是否可以从需要优化器构建配置中排除模块,但是具有该模块并且它的依赖项是否单独优化?

时间:2013-03-13 20:43:57

标签: javascript requirejs r.js

所以情况如下:

我有一堆页面特定的js文件,我正在使用r.js进行优化。

99%的人将名为core.js的模块定义为依赖项。 Core有5个自己的依赖。

我想通过从页面js文件的优化版本中排除核心来利用缓存。

所以在我的build.js中,我尝试了以下几点:

modules: [
  {
     name : 'modules/core'
  },
  {
     name: 'homepage',
     exclude : ['modules/core']
  }
]

当我运行优化器时,它会优化模块/核心和核心。主页很好。

转到使用homepage.js的页面,问题是:core.js&它的依赖项被单独加载,导致7个请求而不是2个。

在上面的例子中,我想要实现的是:将homepage.js和它的依赖关系优化到一个文件中并将其加载到core.js的优化版本中,而不是加载到core.js中它是独立的依赖。

这甚至可能吗?

1 个答案:

答案 0 :(得分:2)

在构建之后,您有两个选项:

1)修改顶级加载,以便在任何其他加载之前加载模块/核心:

require(['modules/core'], function () {
  //Now do normal require stuff in here
});

如果在首页加载完成之前看到所请求的模块,请在主页中使用另一个嵌套的require()调用。

2)插入一个require.config块,将核心中的所有模块指向核心文件。 requirejs只会在多个模块ID都指向它时才获取core.js文件:

require.config({
  paths: {
    'mod/one': 'modules/core',
    'mod/two', 'modules/core',
    ...
  }
});

或者看到这种示例项目设置加载一个公共的,然后是一个特定于页面的图层,但是在构建之后无需进行源修改即可工作(只使用#1的变体,但将其设置为以来源形式工作):

https://github.com/requirejs/example-multipage