2012-07-26 62 views
24

我正在通過優化器文檔閱讀了很長一段時間,但似乎我無法確定它。該醫生說:requireJS優化器不包括嵌套的require調用

優化器將只合並了在陣列中的字符串文字 傳遞給頂層指定的模塊需要,並定義 呼叫,否則需要(「名」)字符串常量調用一個簡化的 CommonJS包裝。因此,它不會找到通過 變量名稱加載的模塊:

確定迄今爲止這麼好。這基本上意味着r.js將不包含也不抓取嵌套的依賴關係。現在讓我們假設我們有一個「主應用程序」文件,該文件如下所示:

require([ 'es5shim', 'tools' ], function() { 
    console.log('fictive app entry point'); 

    require([ 'domready!' ], function(doc) { 
     console.log('domReady, loading GUI modules...'); 
     require([ 'GUI/window', 'GUI/header', 'GUI/content' ]); 
    }); 
}); 

我想這個問題變得很明顯這裏。 r.js(優化器)僅通過將es5shim.jstools.js鏈接到該文件來創建該文件。有沒有什麼好的方法/解決方法來告訴優化器,它也應該鏈接本例中的window.jsheader.jscontent.js文件?

當然,在這個實例中的domReady插件將被加載,它最終將執行回調,但結構本身看起來阻止了優化器的工作。

問題是

  • 如果我只是將列出所有模塊中的「前需要調用」,將r.js還包括鏈接+從嵌套的所有頂級requiredefine電話和嵌套嵌套模塊到主應用程序文件?

  • 他們提包括r.js在文檔選項。這裏是否有意義,如果是這樣,如何正確調用它?

當然你不想以後上失去了選項來延遲加載的模塊,但是對於這種依賴(等待DOMContentLoaded),我希望有一種方式來變通方法。

+0

我不明白:你爲什麼要嵌套首先要求?爲什麼不使GUI /窗口依賴於es5shim,並使es5shim依賴於domready! ? – machineghost 2012-07-26 17:10:35

回答

44

默認情況下,RequireJS不掃描嵌套的require調用,因爲它假定這些調用是爲了在運行時加載依賴關係。您可以通過設置

findNestedDependencies: true 

覆蓋您的優化配置。希望有所幫助。

+0

非常好,謝謝。 – Eric 2013-02-04 20:06:34

+5

這個知道真的很有用,在RequireJS文檔中找不到特別容易 – hellosmithy 2013-11-11 16:36:08

+0

謝謝!這實際上解決了我的問題! – 2014-08-20 17:29:35