RequireJS Optimizer硬包括

时间:2016-10-22 00:01:09

标签: javascript requirejs r.js requirejs-optimizer

我有一个大型的客户端项目,我想捆绑成2个捆绑而不是1个。

这是我的依赖树:

module's dependency tree

所需的输出是拥有这些包:

  1. main包含b
  2. 只包含x
  3. ab已包含在第一个包中,我不希望用户多次下载一段代码)。
  4. 这是我的优化器配置:

    ({
      appDir: 'www',
      baseUrl: 'js/',
      mainConfigFile: 'www/js/require.config.js',
      dir: 'www-release',
      modules: [
        {
          name: 'main',
          exclude: ['x']
        },
        {
          name: 'x',
          exclude: ['main']
        }
      ],
      optimize: 'none',
      removeCombined: true
    })
    

    我确实要从main中排除x的整个依赖关系树,但仍然包含我明确要求的模块,例如a

    我知道:

    1. include - 明确包含不需要的模块及其整个依赖关系树。
    2. exclude - 排除模块实际上排除了整个依赖关系树,覆盖了include冲突。
    3. excludeShallow - 包含模块的依赖关系树,,包括模块本身。
    4. 有了这个,我没有看到一个明确的方法来实现我想要的,你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

你需要使用像这样的requier.js捆绑功能。

在您的require.config.js文件中

需要写包装设置

bundles: {
    x: ['files for x bundle'],
    b: ['files for b bundle']
}

之后需要更改构建文件。

优化工具配置文件

({
     appDir: 'www',
     baseUrl: 'js/',
    // mainConfigFile: 'www/js/require.config.js',// not need here
     dir: 'www-release',
     modules: [
        {
            name: 'main',
            create: true, // this will create www-release/main.js file(main bundle)
            include: ['main'],
            exclude: ['x']
        },
        {
            name: 'b',
            create: true,
            include: ['files for b bundle'],
            exclude: ['main']
        },
        {
            name: 'x',
            create: true,
            include: ['files for x bundle']
            exclude: ['main']
        }
   ],
   optimize: 'none',
   removeCombined: true
   paths: {
       //put paths object from requierjs.confige file 
   }
});