2016-10-22 96 views
1

我有一个大型的客户端的项目,我想打包成捆2,而不是1RequireJS优化硬包括

这是我的依赖关系树:

module's dependency tree

的期望的输出将有这些包:

  1. main包括b
  2. x,其中包括a(因为b已包含在第一个包中,我不希望用户多次下载一段代码)。

这里是我的优化配置:

({ 
    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 - 包括模块的依赖关系树,而不是包括模块本身。

有了这些,我没有看到明确的方法来完成我想要的,你能帮忙吗?

+0

是这样有效吗? 'name':'x', exclude:['main','b'] }'?你有没有考虑过使用webpack的方式? –

+0

这将不起作用,b将以这种方式在这两个包中丢失。关于webpack - 我有,但现在我坚持requirejs,我不知道什么是切换到webpack的成本。我感觉它不会很快。 – johni

回答

0

您需要使用像这样的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 
    } 
}); 
+0

OP想要创建两个捆绑包,而不是3. – Louis

+0

在这种情况下,只需添加2个模块和2个捆绑包 –