的purpose of the nomodule
attribute是使支持module scripts,忽略特定script
元件新的瀏覽器:
的nomodule
屬性是一個布爾屬性,該屬性阻止腳本在支持模塊的腳本的用戶代理正在執行。
該規範has a good example:
這個例子展示瞭如何將現代用戶代理模塊的腳本,併爲老年用戶代理的經典腳本:
<script type="module" src="app.js"></script>
<script nomodule src="classic-app-bundle.js"></script>
在支持模塊腳本的現代用戶代理中,具有nomodule
屬性的script
元素將b e將被忽略,並且script
元素的類型爲「module
」將被提取並評估(作爲模塊腳本)。相反,較舊的用戶代理將忽略script
元素,其類型爲「module
」,因爲這是他們的未知腳本類型 - 但它們在獲取和評估其他script
元素(作爲經典腳本)時沒有問題,因爲它們不要實現nomodule
屬性。
所以這就是它的工作原理。
在HTML 5中,type
屬性是可選的,默認爲text/javascript
...有沒有這個默認改變了嗎?
默認沒有改變 - 它仍然是text/javascript
。但type
屬性現在也可以具有值module
,這意味着瀏覽器仍然會解析並將其作爲text/javascript
執行 - 但也可以具體爲module script。
如果不是,爲什麼nomodule
有必要?
爲了防止支持模塊腳本的新瀏覽器執行只適用於不支持模塊腳本的舊瀏覽器的腳本,這是必要的,如上例所示。
我可以只使用<script src="bundle.js"></script>
而不使用nomodule
嗎?
是 - 如果bundle.js
不使用模塊。如果它使用模塊,則需要在其上放置type=module
(在這種情況下,舊的瀏覽器將忽略它,因爲它們不識別type
的module
值)。