【发布时间】:2020-12-07 04:21:21
【问题描述】:
我最近钻研了学习 JavaScript 模块化编程的兔子洞,包括一些 JS 模块系统、捆绑器和 ES2015 模块的历史。我现在了解捆绑程序帮助/减轻的一些痛苦,例如:
- 网络延迟(更有效地缓存单个捆绑包,HTTP/1.0 连接),
- 应用模块大小的性能限制(缩小、摇树),
- ES2015 不支持某些功能(裸导入),
- 以及与旧模块系统的向后兼容性(ES2015 模块语法的转换)。
但是我想知道是否有可能在 2020 年创建一个不使用像 webpack 或 Parcel 之类的捆绑器并使用ES2015 模块?需要注意的是,仍然可以使用像 Babel 这样的源到源编译器,只要它保留 ES2015 模块语法。我不是说我想这样做,而是为了争论,有什么缺点?
【问题讨论】:
-
您是指在浏览器中运行的 Javascript 还是在 node.js 中在服务器上运行的 Javascript 或两者兼而有之?任何服务器端代码都不需要捆绑器。
-
客户端代码在现代浏览器中运行时不必捆绑,但如果您要将代码设计成大量的小模块(为了开发效率和重用) ,那么如果不使用可以减少需要加载的单独文件数量的捆绑器,加载效率将非常低。除此之外,我不确定您还想在这里问什么。
-
@jfriend00 是的,感谢您的澄清,我的意思是在浏览器中运行的 JavaScript。我只是在阅读this article 并将
<script type="module">import _ from 'https://unpkg.com/lodash-es'</script>添加到我的index.html以查看网络请求瀑布。所以我的理解是,由于 JS 是一种通过 HTTP 交付的 JIT 编译语言,捆绑器可以被视为“JS SDK”的一部分吗?至少在 HTTP 可以更有效地交付 JS 模块之前? -
如果您设计客户端 JS 文件以实现最佳模块化开发并且因此不设计客户端 JS 文件以实现高效交付,那么捆绑器将是可取的。 “JS SDK 的一部分”是术语和观点的问题,而不是事实,所以我不会真正评论这个断言。当然可以从一开始就设计客户端 JS 文件以实现高效的客户端交付,而不使用捆绑器(就像我们过去所做的那样),但是您将无法同时设计文件的布局以进行模块化开发.捆绑器可让您实现这两个目标。
-
@jfriend00 “捆绑器可以让您同时实现这两个目标” - 谢谢,这是有道理的。
标签: javascript webpack ecmascript-6 module parceljs