2012-07-11 66 views
5

我們正在創建一個我們打算在多個項目中使用的框架。所有項目都將使用require.js來管理模塊和依賴項。如何創建一個可重用的庫作爲AMD模塊構建?

理想情況下,我想使用r.js優化程序將編譯爲單個文件,該文件可以提供給使用它的應用程序。這個文件將包含框架的所有模塊,使得在我的應用程序可以編寫如下代碼:

define(["framework/util/a", "framework/views/b"], function(A, B) { 
    var a = new A(); 
    // etc... 
}); 

但現在看來,有兩個問題的辦法。

  1. 根據framework/util/a沒有告訴它需要加載framework.js require.js將在其中找到util/a
  2. 的優化工具生成包含在framework.jsdefine("util/a", function() { ... });即使require.js所有模塊的名稱加載framework.js沒有什麼可以告訴它定義模塊util/a是一個相對的模塊frameworkframework/util/a

我失去了SOMET這樣被確定興或是更好的方法來構建我的框架作爲一個CommonJS包並使用require.js的packages配置選項?

+0

我不認爲這是一種合理的方式來做到這一點。從@jrburke:「只是」以源代碼的形式將模塊分發到目錄中,而不是構建。「 – rharper 2012-11-12 14:12:20

回答

2

回覆:1.似乎確實r.js優化不是用來優化部分依賴樹,因爲懶加載取決於文件路徑。例如。要求path/to/module實際加載path/to看起來像一個黑客。一種解決方案是放棄延遲加載,並在應用程序代碼上方包含framework-built.js

回覆:2.所以你現在需要你的framework-built.js完整路徑。一種方法是建立一個虛擬父母,需要所有的framework,比如dummy-framework.js。這樣你的dummy-framework-built.js將有framework定義完整的路徑,如果不是延遲加載,它應該工作正常。

免責聲明:我沒有require.js使用所有的東西,雖然這是我最大的努力:)

+0

感謝您的努力。你的方法使我能夠達到我想要的最接近的水平 - 絕對值得投票贊成。但是,與jrburke的快速對話告訴我,我可能根本不想編譯這個庫,而只是分發整個源文件夾。 – rharper 2012-11-12 14:10:26

+0

我也和詹姆斯聊過,自從我發佈這篇文章以來,也學到了更多。請參閱http://stackoverflow.com/questions/12302440/requirejs-is-there-a-way-to-achieve-multiple-base-urls我在哪裏回答我自己的問題。所以我通過使用自定義的「路徑」來實現一個「框架」應用程序來進行實時延遲加載,而在本地生產中,我通過將這些相同的路徑指向本地「框架」(這只是一個兄弟文件夾)來構建。 – jpillora 2012-11-13 02:02:33