对于<script>
使用ES6模块时是否应该在标签中包含文件,或者浏览器是否会自动请求文件,我似乎找不到答案。如果是这样,它将如何解决该路径?
在评论中,您说过:
我知道还没有支持。我的问题是有关实施时的行为
我们第一次发布此问题和答案时并没有,但是现在已经有了。它与我先前描述的临时指定的匹配:您使用type="module"
:
<script src="mod.js" type="module"></script>
您仅对入口点执行此操作,而不对入口点通过引用的模块执行此操作import
(更多信息,请参见下文)。
根据WHAT-WG规范:
type属性允许定制表示的脚本类型:
- ...
- 将属性设置为字符串“ module”的ASCII大小写不敏感匹配,表示该脚本是模块脚本,将根据JavaScript Module顶级产品进行解释。...
- ...
...
经典脚本和模块脚本可以嵌入式嵌入,也可以使用
src
属性从外部文件导入,如果指定了属性,该属性将提供要使用的外部脚本资源的URL。
模块依赖关系将被解决并自动获取,您无需在其自己的script
标签中列出它们。只是入口点。
请注意,您可以使用nomodule
属性将模块提供给启用了模块的浏览器,也可以将已编译的捆绑包提供给未启用模块的浏览器:
该
nomodule
属性是一个布尔属性,可防止脚本在支持模块脚本的用户代理中执行。如下所示,这允许在现代用户代理中选择性执行模块脚本,而在较旧的用户代理中选择性执行经典脚本。nomodule
不得在模块脚本上指定该属性(如果已指定,则将被忽略)。
而且,由于任何支持模块的浏览器都至少支持ES2015功能(如果还不支持ES2016-ES2018),这意味着您可以class
在模块中提供本机和箭头功能以及此类代码,并在非模块包中提供已移植的代码,因此您可以使用本机来自本机引擎的性能。
后来,规范说:
要解析给定URL基本URL和JavaScript字符串说明符的模块说明符,请执行以下步骤。它将返回URL记录或失败。
- 将URL解析器应用于specifier。如果结果不是失败,则返回结果。
- 如果说明符不是以字符U + 002F SOLIDUS(/)开头,则两个字符序列U + 002E FULL STOP,U + 002F SOLIDUS(./),或三个字符序列U + 002E FULL STOP,U + 002E FULL STOP,U + 002F SOLIDUS(../),返回失败。
注意:此限制到位,以便将来我们可以允许自定义模块加载程序为“裸露”的导入说明符赋予特殊含义,例如
import "jquery"
或import "web/crypto"
。目前,任何此类导入都将失败,而不是被视为相对URL。
请注意,限制适用于模块标识符,在import
声明中,而不是src
一个type="module"
script
标签。(也就是说,一致性可能不是坏事...)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句