在浏览器中使用ES6模块时,应该在`script`标记中引用文件吗?

马克斯·科瑞斯基(Max Koretskyi)

对于<script>使用ES6模块时是否应该在标签中包含文件,或者浏览器是否会自动请求文件,我似乎找不到答案如果是这样,它将如何解决该路径?

TJ人群

在评论中,您说过:

我知道还没有支持。我的问题是有关实施时的行为

我们第一次发布此问题和答案时并没有,但是现在已经有了。它与我先前描述的临时指定的匹配:您使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不应该在ES6中使用全部导入

浏览器中的ES6模块

什么时候应该在ES6箭头函数中使用return语句

我应该在ES6节点项目中使用多少Promise?

我应该在laravel 5.2中使用批量分配文件上传吗?

为了性能,我们应该在 ES6 类的原型中包含方法吗?

当参数在 Rust 中作为引用提供时,我们应该在函数体内使用参数引用吗?

浏览器中的ES6模块加载器将忽略cookie

在浏览器中的 es6 模块中无法识别从 node_modules 导入

我应该在生产中使用go模块吗

我应该在go项目中使用git子模块吗?

浏览器中的ES6模块:Uncaught SyntaxError:意外的令牌导入

在浏览器中,不执行从 ES6 模块导入的 JS 代码

从ES6模块解析到绝对URL的相对路径(在浏览器中)

2021年如何使用npm包作为浏览器加载的ES6模块?

我应该在3.3和3.4中使用新的Symfony 4文件结构吗?

混淆:如何将ES6浏览器模块与Typescript一起使用(不带模块捆绑器)

我应该在DTO中使用构建器模式吗?

我应该在Elixir Phoenix的控制器或模型中使用Ecto.Repo吗?

可以或应该在控制器#action 中使用 Task.async() 吗?

我应该在实现文件中使用nullable / nonnull吗

我应该在ejs文件中使用脚本标签吗?

使用ES6模块语法浏览Webstorm中的Typescript引用

我应该在Laravel中使用belongsTo或hasOne吗?

我应该在ECS中使用静态类吗?

我应该在Couchbase中使用本地索引吗?

我应该在Promise中使用return吗?

我应该在Java中使用Qt Jambi吗?

我应该在 Kotlin 的界面中使用属性吗?