【问题标题】:Are type="module" javascript files all isolated from each other?type="module" javascript 文件是否都是相互隔离的?
【发布时间】:2019-09-20 17:48:50
【问题描述】:

我的 HTML 文档底部引用了两个外部脚本:

<script type="module" src="/scripts-1.js"></script>
<script type="module" src="/scripts-2.js"></script>

我一直在运行一些测试,如果我添加,我可以看到:

const logHelloWorld = () => console.log('Hello World');

logHelloWorld();

到任一外部文件,然后函数将执行。

但是如果我将函数声明添加到/scripts-1.jslogHelloWorld();/scripts-2.js,那么控制台会显示错误:

ReferenceError: logHelloWorld 未定义

这是因为所有type="module" 脚​​本都是相互隔离的吗?

【问题讨论】:

    标签: javascript ecmascript-6 es6-modules


    【解决方案1】:

    是的。其他模块使用的资源必须明确exported,并在需要的地方明确imported。

    Here 是 ES6 模块系统的众多指南之一。

    【讨论】:

      【解决方案2】:

      模块实际上是相互“绝缘”的。你可以export 一个模块中的东西,然后import 将它们放到另一个模块中。一般来说,type="module" 标志被认为是目前不普遍使用的未来功能。最好使用其他工具将所有 JS 文件捆绑在一起,例如 webpack。

      【讨论】:

      • 谢谢,彼得。我不知道存在捆绑与原生模块的争论。我在 2019 年初开始使用原生 ES2015 模块,我真的喜欢我目前所看到的。早在 2019 年 1 月,我就开发了一个基于 PHP 的解决方法来弥补对 Dynamic Import 的支持不足,但我发现现在支持已经到来:caniuse.com/#feat=es6-module-dynamic-import 上个月类似 philipwalton.com/articles/… 的文章表明,采用原生模块可能从现在开始逐步增加。
      猜你喜欢
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多