2013-02-09 51 views
1

我有以下幾點。將嵌套模塊與require.js優化器結合使用

require([ 'a', 'b' ], function() {  
    if(x){ 
     require([ 'c', 'd' ], function() {}); 
    } 
}); 

c將始終裝載d。無論如何,優化器優化cd,以便它們將作爲一個文件加載?

編輯:

也即時使用r.js作爲優化。我的構建腳本的模塊看起來像這樣。

modules: [ 
    { 
     name: "main", 
    }, 
    { 
     name: "c", 
      include: ["d"] 
    } 
] 

這將包括在cd,但兩者cd仍然在運行時加載。

回答

1

我得到了答案here

您可以設置路徑映射在生產通知RequireJS該d位於c

簡單地做:

paths: { 
    'd': 'c' 
} 
2

r.js(我假定這就是你的「優化」的意思),不會觸及cd除非您明確要求它[「你總是可以明確地添加沒有經過優化的靜態分析發現模塊通過使用包括選項。「 - 從RequireJS docs]。如果你這樣做,他們將在優化的輸出中結束,並將在運行時連同ab和其餘代碼(即使xfalserequire塊永遠不會到達)加載。

如果不這樣做,r.js將跳過塊RequireJS只會在運行時解決cd(如果xtrue),當它是來不及做任何優化或級聯。

RE:編輯

正確的辦法,迫使包括maincd是:

modules: [ { 
     name: "main", 
     include: ["c", "d"] 
    } ] 

這意味着:「包括一切main.js需要明確還要加c.jsd.js

RE:評論:

哦,你說的沒錯,你的配置也將建立一個優化的c.js既包括cdRequireJS將加載「獨立」 d反正。奇怪的是,它仍然會使用優化文件中的d,甚至不會評估獨立的d.js(通過編輯優化的c.jsd.js的內容進行檢查)。我猜RequireJS會立即請求所有列出的依賴關係,因爲它無法知道加載c將會保證d依賴關係(這隻在模塊被加載和處理後才知道)。這是有道理的,因爲唯一的其他選擇是逐個請求文件 - 這將是一個瓶頸。

+0

是我使用r.js,我已經使用include選項嘗試。這對我不起作用。 – 2013-02-09 16:57:42

+0

關於編輯:是不是隻會產生一個文件,裏面有'a','b','c'和'd'?我想'c'和'd'作爲一個文件加載,並且只在需要時才加載。 – 2013-02-09 20:46:44