2016-10-22 95 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個捆綁包 –