通过 <script src=""> 加载 JavaScript ES6 模块并在 <script> 标签中导入所有导出是否相同?

tor*_*tte 6 javascript script-tag es6-modules deno

无法理解我刚刚在关于deno bundle命令的 Deno 手册部分末尾阅读的两个示例之间的区别:

捆绑包也可以在 Web 浏览器中加载。bundle 是一个自包含的 ES 模块,所以 type 属性必须设置为“module”。例如:

<script type="module" src="website.bundle.js"></script>
Run Code Online (Sandbox Code Playgroud)

或者您可以将其导入另一个 ES 模块以使用:

<script type="module">
  import * as website from "website.bundle.js";
</script>
Run Code Online (Sandbox Code Playgroud)

我的印象是这两种形式都达到了相同的效果(即“在浏览器继续解析页面之前立即获取并执行”),而后者用于跟随脚本或想要缩小导入的范围(例如,如本答案所示)。


这可能被认为是其他问题的重复(见列表底部),但这些答案对我没有多大帮助,而且辅助资料似乎也没有表明我的假设是否正确。(另一方面,我很有可能忽略了一些明显的东西,并且不得不提高我的阅读理解能力......)

Fre*_*ark 3

我的印象是这两种形式达到了相同的效果

是的,这两者会产生相同的效果

(即“在浏览器继续解析页面之前立即获取并执行”),

不会,默认情况下任何<scriptwithtype="module"都会这样defer,因此加载不会阻止解析。然后,在解析之后和触发之前,所有延迟的脚本都会按照它们出现的顺序执行DOMContentLoaded

当脚本遵循或想要缩小导入范围时使用后者(例如,如本答案中所示)。

您想使用哪一个还取决于捆绑包中完成的工作。如果捆绑包仅包含库,并且不会产生任何副作用(即与页面交互、渲染等),那么您可能需要导入它以便可以使用这些功能。

如果它确实有副作用(即渲染到 DOM 的 React 应用程序),并且是独立的,那么只需包含标签就足以启动它


归档时间:

查看次数:

188 次

最近记录:

4 年,6 月 前