我可以在没有捆绑器的情况下构建生产 JavaScript Web 应用程序吗?
Can I build a production JavaScript web application without a bundler?
我最近钻进了 JavaScript 学习模块化编程的陷阱,包括 JS 模块系统、捆绑器和 ES2015 模块的一些历史。我现在明白了打包器 help/ed 减轻的一些痛苦,例如:
- 网络延迟(更有效地缓存单个包,HTTP/1.0 个连接),
- 应用程序模块大小的性能限制(缩小、摇树优化),
- ES2015 不支持某些功能(裸导入),
- 并向后兼容旧模块系统(ES2015 模块语法的转换)。
但是我想知道是否有可能在 2020 年创建一个不使用像 webpack 或 这样的捆绑器的生产 JS Web 应用程序Parcel 并使用 ES2015 模块?需要注意的是,像 Babel 这样的源到源编译器仍然可以使用,只要它保留 ES2015 模块语法。我并不是说我想这样做,但为了争论,缺点是什么?
Client-side 代码在现代浏览器中 运行 时不必打包,但是如果你打算将你的代码设计成大量的小模块(为了开发效率和重用),那么如果你不使用可以减少需要加载的单独文件数量的打包器,加载效率将非常低。
如果您设计客户端 JS 文件以实现最佳模块化开发,那么打包器将是可取的,因此不要将客户端 JS 文件设计为高效交付,因为打包器可以将内容打包在一起以在构建过程中高效交付。
“JS SDK 的一部分”是术语和观点的问题,不是事实,所以我不会真正评论该断言。
当然可以从一开始就设计 client-side JS 文件以实现高效 client-side 交付而不使用捆绑器(就像我们以前那样),但您将无法同时设计用于模块化开发的文件布局。捆绑器可以让您实现这两个目标,这可能就是它们如此受欢迎的原因。
However I'd like to know if it is possible to create a production JS web application in 2020 that doesn't use a bundler like webpack or Parcel and uses ES2015 Modules?
是的,如果您 运行 在支持 import
和 export
.
的浏览器中,则可以不用捆绑器
I'm not saying I would like to do this but for the sake of argument, what would be the downsides?
如上所述,您要么放弃高效 client-side 加载,要么放弃理想的模块化设计,因为两者的设计参数相互冲突。
我最近钻进了 JavaScript 学习模块化编程的陷阱,包括 JS 模块系统、捆绑器和 ES2015 模块的一些历史。我现在明白了打包器 help/ed 减轻的一些痛苦,例如:
- 网络延迟(更有效地缓存单个包,HTTP/1.0 个连接),
- 应用程序模块大小的性能限制(缩小、摇树优化),
- ES2015 不支持某些功能(裸导入),
- 并向后兼容旧模块系统(ES2015 模块语法的转换)。
但是我想知道是否有可能在 2020 年创建一个不使用像 webpack 或 这样的捆绑器的生产 JS Web 应用程序Parcel 并使用 ES2015 模块?需要注意的是,像 Babel 这样的源到源编译器仍然可以使用,只要它保留 ES2015 模块语法。我并不是说我想这样做,但为了争论,缺点是什么?
Client-side 代码在现代浏览器中 运行 时不必打包,但是如果你打算将你的代码设计成大量的小模块(为了开发效率和重用),那么如果你不使用可以减少需要加载的单独文件数量的打包器,加载效率将非常低。
如果您设计客户端 JS 文件以实现最佳模块化开发,那么打包器将是可取的,因此不要将客户端 JS 文件设计为高效交付,因为打包器可以将内容打包在一起以在构建过程中高效交付。
“JS SDK 的一部分”是术语和观点的问题,不是事实,所以我不会真正评论该断言。
当然可以从一开始就设计 client-side JS 文件以实现高效 client-side 交付而不使用捆绑器(就像我们以前那样),但您将无法同时设计用于模块化开发的文件布局。捆绑器可以让您实现这两个目标,这可能就是它们如此受欢迎的原因。
However I'd like to know if it is possible to create a production JS web application in 2020 that doesn't use a bundler like webpack or Parcel and uses ES2015 Modules?
是的,如果您 运行 在支持 import
和 export
.
I'm not saying I would like to do this but for the sake of argument, what would be the downsides?
如上所述,您要么放弃高效 client-side 加载,要么放弃理想的模块化设计,因为两者的设计参数相互冲突。