簡體   English   中英

使用r.js對不同AMD依賴關系樹的共享依賴關系進行分組

[英]Grouping shared dependencies of different AMD dependency trees with r.js

我有一個AMD項目,該項目基本上具有以下結構:

samples/sample1/main
________________
* sharedpackage1/subfolder1/module1
* sharedpackage1/subfolder2/module1
* ./localmodule1
* ./localmodule2
* ./subfolder1/localmodule1



samples/sample2/main
________________
* sharedpackage1/subfolder2/module2
* sharedpackage2/subfolder1/subfolder1/module1
* ./localmodule1
* ./localmodule2
* ./localmodule3
* ./subfolder1/localmodule1
* ./subfolder1/localmodule2
* ./subfolder2/localmodule1



samples/sample3/main
________________
* sharedpackage2/subfolder2/subfolder1/module1
* sharedpackage2/subfolder3/module1
* ./localmodule1
* ./localmodule2
* ./localmodule3
* ./localmodule4
* ./localmodule5

...

我想使用r.js打包我的項目並最終得到...

  • 所有樣本的一個shared.js文件,其中至少包含一個樣本,其中包含sharedpackage1sharedpackage2中的所有模塊-及其依賴關系
  • 每個樣本一個main.js文件,其中包含該樣本特定的所有模塊(“本地”模塊)

注意...

  • sharedpackage1sharedpackage2是可以包含數百個相互依賴的模塊的庫
  • sharedpackage1sharedpackage2具有“ root”(或“ main”)模塊,該模塊具有包中的所有其他模塊作為依賴項
  • 在模塊sharedpackage1可以具有模塊從sharedpackage2作為依賴
  • 在模塊sharedpackage2只有在其它模塊sharedpackage2作為依賴
  • sharedpackage1sharedpackage2中未在任何示例中使用的模塊不應包含在shared.js
  • 特定於樣本的配置應盡可能少且盡可能通用,以便可以在構建時使用Node腳本輕松生成

現在,只要每個新樣本都有一個main.js文件作為“ root”模塊,那么在沒有任何其他配置的情況下讓構建腳本自動拾取每個新樣本就不難了。 所以我會處理。

我從發現的任何文檔中似乎都無法發現是如何創建一個shared.js文件,該文件僅包含sharedpackage2中使用的來自sharedpackage1sharedpackage2模塊,而沒有定義shared模塊,我手動列出了每個示例的每個main.js的所有獨立依賴項(這不適合我的用例)。

是否可以使用r.js做到這r.js 如果是,我該如何實現?

我在Github上收到jrburke的以下答復:

example-multipage項目聽起來最接近您的描述。 但是,它可能沒有您想要的那么聰明。 “公共”層仍需要構建配置來列出要include一些頂級模塊。 它可以按include數組中的頂級模塊跟蹤模塊,因此它不必是詳盡的圖形清單。

如果您不想執行example-multipage進行的兩階段加載,這聽起來也可能需要bundles config 但是bundle config可能非常羅word。

如果您希望進行細粒度的跟蹤和分組,則amodro-trace只會跟蹤模塊,並且您可以使用自己的構建腳本將跟蹤的模塊組合到所需的包中。 仍可能需要花費一些精力才能將這些內置文件轉換為運行時requirejs配置,該配置可用於有效地加載捆綁軟件。

對於模塊圖的復雜二等分和捆綁束,沒有可靠的簡單答案。 r.js並不是很聰明,因為它沒有做任何花哨的源代碼修改,例如,引入中間的require([])調用來加載捆綁包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM