這兩者之間存在一些緊張關係,因爲兩者都希望成爲跟蹤依賴關係的記錄系統。例如,如果您執行http導入/components/core-ajax/core-ajax.html
,它將包含http導入../polymer/polymer.html
,確保在運行core-ajax的任何腳本之前加載Polymer。 Polymer還有一個名爲vulcanize的工具,用於將一組Web組件編譯爲一個文件,以減少生產中的HTTP請求數量。
聽起來很熟悉嗎? require.js對所有這些片斷都有類似的機制。還值得注意的是,我並不知道正在採取什麼措施來統一所有這些,並且使事情變得更加複雜,ES6模塊提案正在聚集一堂。
我現在的建議是在可能的情況下只選擇一個依賴項跟蹤器。如果您使用的是Web組件,我建議您使用HTML導入,因爲將requirejs模塊轉換爲簡單的Web組件比將其轉換爲反向組件要容易得多。
例如假設你有一個依賴於jquery的腳本jquery.datatables.js
。佈局你的文件,如:
- 組件
- jquery.datatables
- jquery.datatables.js
- jquery.datatables.html
- jQuery的
jquery.html將包含:
<script src='jquery.js'></script>
而且在jquery.datatables.html你會把:
<link rel='import' href='../jquery/jquery.html'>
<script src='jquery.datatables.js'></script>
HTML進口照顧重複刪除,所以你可以確信jquery.html
只會被加載一次。
我不知道如何與AMD互操作的ES6模塊?我無法想象在沒有AMD /要求的情況下組織一個大型項目。 – httpete
這是一個完整的問題,但Square的es6模塊轉換器現在支持編譯爲AMD樣式的模塊,並且由於es6模塊加載行爲是可插入的,所以可以互操作。 –
我發現這個[討論](https://gist.github.com/omo/9986103)非常有助於理解requirejs AMD風格的DI和HTML導入(tl; dr去爲html導入,他們是去尋找requirejs能夠做的事情的超集) – Renaud