的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
值)。