【问题标题】:How will ECMAScript 6 Harmony modules be managed in HTML script tags?ECMAScript 6 Harmony 模块将如何在 HTML 脚本标签中进行管理?
【发布时间】:2014-10-06 18:33:33
【问题描述】:

我意识到这还没有实现,所以是假设性的。

当 ES6 Harmony 模块最终在现代浏览器中实现时,语法和实现将如何处理内联 JavaScript?通过比较,我可以想象每个文件都被视为一个模块的概念区别,这意味着HTML文档将为每个单独的模块都有一个<script src="...">标签。

但是,这在浏览器中似乎很奇怪,因为这意味着如果您有 50 个模块,那么您现在有 50 个客户端/服务器连接。如果您将文件连接起来或可能在<script>...</script> 标记中内联多个模块,则会引入另一个问题。

这最终会将全局/名称间距问题混为一谈:

<script>
  var Foo = {};
  var Baz = 1; // Local or Global?
  export default Foo;

  import Foo in 'foo';
  var Bar = {};
  var Baz = 2; // Local or Global?
  export default Bar;
</script>

在 CommonJS -> trans-piled 或 AMD 中,所有内容都包裹在一个闭包中。让我相信,当 ES6 出现时,我们仍然需要包装我们的代码:

<script>
  (function() {
    var Foo = {};
    var Baz = 1; // Definitely Local now!
    export default Foo;
  })();

  (function() {
    import Foo in 'foo';
    var Bar = {};
    var Baz = 2; // Definitely Local now!
    export default Bar;
  })();
</script>

ES6 Harmony 模块的未来实现将如何处理浏览器的级联源的平面依赖模型?

【问题讨论】:

  • 好吧,这将在 HTML5 开发人员之间讨论。

标签: javascript ecmascript-6 ecmascript-harmony


【解决方案1】:

模块can be concatenated together 没有module SomeName { /* module contents here */ } 语法问题

编辑:模块块语法已从规范中删除。委员会的结论似乎是concatenation is a hack to work around a limitation of HTTP 1。最终的解决方案是拥有一个支持 HTTP 2 的服务器和客户端,以便客户端可以多路复用其请求,并且服务器可以向客户端推送额外的资源(感谢Andreas!)

至于在浏览器中处理模块语义,引入a separate &lt;module&gt; tag 用于在页面上创建单独的模块。 (由于模块可以异步解析,它们与内联 script 元素的语义不匹配,因此需要一个新标签)。

另见:

【讨论】:

  • 谢谢。我没有意识到module 关键字。干杯
  • 这已经不可能了,模块声明早就从模块提案中删除了。
  • (另外,您链接到的 ES6 草案还不是最终版本。)
  • @Andreas - 轻笑 好吧,你肯定比我更了解!是什么取代了模块声明的功能(或者该功能是否已列出)?如果表,这是否意味着每个模块都需要有自己的源文件?
  • 更多挖掘发现了答案 - 我更新了我的答案,据我所知,这是新的现实。让我知道如果我错过了什么/仍然完全不在基地!
猜你喜欢
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2023-03-13
  • 2016-01-10
  • 2013-06-24
  • 1970-01-01
  • 2017-10-04
相关资源
最近更新 更多