Webpack 与 ES6 模块

Abh*_*ari 14 ecmascript-6 webpack es6-modules

最近开始学习Webpack。我的理解是,它将各种资源(如 JavaScript、CSS 等)捆绑到捆绑包中。

但是对于 JavaScript,我们不能用 ES6 模块实现相同的功能吗?例如,理想情况下,我们的登陆页面 .html 文件中只能包含一个 module 类型的脚本,并且该脚本模块将以 ES6 方式导入 require 依赖项。

我认为几乎所有现代浏览器都支持 ES6 模块。在这种情况下,Webpack 不是多余的吗?

小智 13

对于大多数浏览器来说,是的,您只需使用 ES6 模块即可将所有需要的代码传输到浏览器,而无需使用 Webpack。不过,您是否愿意这样做是另一回事,并且取决于您的目标浏览器以及您的应用程序包含多少个模块(与您对大量网络请求的容忍度相平衡)。

目前,浏览器对 ES6 模块的支持几乎无处不在,但例如在 Android 上,export目前嵌入应用程序的浏览器尚不支持。因此,如果您想让脚本在 Android 上的 Facebook、LinkedIn 或 Twitter 应用内浏览器中运行,这将是一个问题。

一个潜在的更大问题是,如果不捆绑代码,您可能需要预期的网络请求数量。如果您的应用程序由两打模块组成(模块数量根本不是疯狂的),那么您的浏览器必须发出两打网络请求。您可能知道,通过两次请求加载(比如说)200K 的 JavaScript 比在一个请求中加载同样 200K 的 JavaScript 慢很多。

最后,即使您要在客户端加载两打模块,您可能也希望加载缩小的 JavaScript(即使您不进行转译,只是缩小)。这意味着您已经在进行一些服务器端代码操作。这意味着,将所有代码捆绑为最后一步仍然几乎总是有意义的。

希望这可以帮助!这是一个很好且合理的问题;只是回答这个问题让我思考了一些我以前没有真正思考过的事情。

  • “在两个请求中加载(比如说)200K 的 JavaScript 比在一个请求中加载同样 200K 的 JavaScript 慢很多”,使用 http/2 多路复用已经过时了 (5认同)