每日一博 | 基于 esbuild 的 universal bundler 设计
——字节跳动前端 ByteFE :杨健 背景 由于Lynx(公司自研跨端框架)编译工具和传统Web编译工具链有较大的差别(如不支持动态style和动态script基本告别了bundleless和code splitting,模块系统基于json而非js,没有浏览器环境),且有在Web端实时编译(搭建系统)、web端动态编译(WebIDE),服务端实时编译(服务端编译下发)、和多版本切换等需求,因此我们需要开发一个即支持在本地也支持在浏览器工作且可以根据业务灵活定制开发的bundler,即universal bundler,在开发universal bundler的过程中也碰到了一些问题,最后我们基于esbuild开发了全新的universal bundler,解决了我们碰到的大部分问题。 什么是bundler bundler的工作就是将一系列通过模块方式组织的代码将其打包成一个或多个文件,我们常见的bundler包括webpack、rollup、esbuild等。 这里的模块组织形式大部分指的是基于js的模块系统,但也不排除其他方式组织的模块系统(如wasm、小程序的json的usin...