2013-07-29 49 views
5

是否可以從優化的RequireJS/r.js包中導入單個模塊?RequireJS - 在r.js優化包中導入模塊

我有一個JavaScript項目分爲兩個獨立的組件 - 「在MyLibrary」和「MyApplication的」

在MyLibrary由兩個獨立的模塊,「MyModule1」和「MyModule2」。

在開發模式下,我可以使用RequireJS和MyApplication中的普通定義(['MyLibrary/MyModule1'],function(){})語法導入每個模塊。

但是,一旦通過r.js運行MyLibrary,這似乎不再可能 - 似乎沒有辦法直接引用內部模塊了嗎?

我可以從編譯/優化的源代碼中看到,每個模塊都有define()塊,但是我的應用程序中的RequireJS似乎無法直接引用它們。

這是可能的,還是我將需要捆綁我的整個應用程序到一個單一的文件才能工作。

編輯:RequireJS優化階段正在我的Play框架中完成,我對構建配置有最小的控制。

({appDir: "javascripts", 
[info]   baseUrl: ".", 
[info]   dir:"javascripts-min", mainConfigFile: "javascripts/build.js", modules:   [{name: "main"}]}) 
+0

你可以發佈你的r.js構建配置和任何其他相關的代碼嗎? – explunit

+0

構建文件由我正在使用的框架(Play 2.1)即時生成,並且沒有太多它們。無論如何,我會加入它。 –

回答

2

爲了使用庫中的模塊,您需要指示RequireJS如何找到這些模塊。在main.js你需要有這樣的事情:

require.config({ 
     // ... 
     paths: { 
      // ... 
      'MyLibraryBundleName': 'dist/MyLibraryFile', 
      // ... 
     }, 
     // ... 
     bundles: { 
      //... 
      'MyLibraryBundleName': ['MyLibrary/MyModule1', 'MyLibrary/MyModule2'], 
      //... 
     } 
    }); 

當MyApplication的被引用這樣的模塊:

define(['MyLibrary/MyModule1'],function(){}) 

...你提到,RequireJS將尋找「在MyLibrary/MyModule1 '並將其發現到「捆綁」部分,之後將檢查'路徑'部分以找到將被加載的實際文件'dist/MyLibraryFile'。