1、esbuild 是使用go語(yǔ)言編寫的一個(gè)前端構(gòu)建工具
相對(duì)于nodeJs的構(gòu)建工具如webpack。go語(yǔ)言是純機(jī)器碼,沒有js的解釋過程;go新開了一個(gè)進(jìn)程多線程并行,而js是單線程串行化的,所以從開發(fā)語(yǔ)言層面來(lái)說就更快。當(dāng)nodejs還在解析打包程序的js的時(shí)候,go已經(jīng)在解析要構(gòu)建的js了。
2、esbuild內(nèi)置了部分的loader直接使用go語(yǔ)言編寫,可以直接使用
相對(duì)于nodeJs的構(gòu)建工具中相同功能的loader相比也更快。不同于webpack中l(wèi)oader都要配置添加。比如內(nèi)置了對(duì).js、.jsx、.ts、.tsx 、.css、.module.css 等的支持,其他文件類型則需要添加社區(qū)的loader或者手寫插件進(jìn)行處理,比如:less、sass、img、字體圖標(biāo)庫(kù)等。
esbuild的生態(tài)還不完善,很多插件其實(shí)只是包裝了開源的loader框架,本質(zhì)上還是用的js實(shí)現(xiàn)的,而且很多社區(qū)提供的插件都存在各種問題,需要自己實(shí)現(xiàn)插件,比如對(duì)css進(jìn)行瀏覽器兼容添加瀏覽器前綴等問題
3、esbuild的代碼分割很雞肋
代碼分割可以減小了初始加載時(shí)的文件體積,加速頁(yè)面加載時(shí)間;也能提高緩存利用率,節(jié)省帶寬成本;多個(gè)小塊的代碼可以并行下載,提高整體加載效率。而esbuild的代碼分割,只支持esm 格式,對(duì)瀏覽器版本有限制;能對(duì)動(dòng)態(tài) import 的內(nèi)容或多入口同時(shí)用到的代碼進(jìn)行分割。無(wú)法做到像webpack一樣將使用到的某個(gè)庫(kù)單獨(dú)打包出去。
4、esbuild不支持HMR,需要借助插件實(shí)現(xiàn)。
5、esbuild目前的應(yīng)用
主要因?yàn)閑sbuild在代碼分割、css處理、不支持HMR、沒有提供AST能力(不能轉(zhuǎn)換成兼容低版本瀏覽器代碼)等問題,雖然它很快,但它不適合直接用于生產(chǎn)環(huán)境,而更適合作為一種偏底層的模塊打包工具,需要在它的基礎(chǔ)上二次封裝。在其他的構(gòu)建工具中,只是將esbuild應(yīng)用于開發(fā)環(huán)境,從而有更快的開發(fā)體驗(yàn),比如在vite中 ,開發(fā)環(huán)境下使用esbuild快速構(gòu)建,而構(gòu)建部署版本時(shí)則使用的是rollup;在umi/mfsu中,開發(fā)環(huán)境下使用esbuild-loader替代label,而構(gòu)建部署版本時(shí)則還是使用的babel。
總的來(lái)說,esbuild具有極快的構(gòu)建速度、可擴(kuò)展性、支持多種格式、不需要設(shè)置各種 loader,配置簡(jiǎn)單等。但還有很多不足:
- 社區(qū)生態(tài)很弱,跟 Webpack 和 Vite 完全不在一個(gè)量級(jí)
- 插件之間兼容性問題很嚴(yán)重
- 代碼分割能力太弱,只能基于入口進(jìn)行分割
- 對(duì)目標(biāo)瀏覽器版本有一定要求
- 不支持 HMR
- 為了保持結(jié)構(gòu)的一致性,沒有提供轉(zhuǎn)化的 AST 的 API
- 由于工具和插件還是采用 JavaScript 編寫,存在解析速度相對(duì)較慢的可能性
- 對(duì)于復(fù)雜場(chǎng)景,配置還是像 Webpack 一樣復(fù)雜
- 可以在簡(jiǎn)單項(xiàng)目或類庫(kù)開發(fā)中使用
總之,esbuild 不是像 Webpack 是一個(gè)大一統(tǒng)項(xiàng)目,提供完善的插件機(jī)制,而是在極度精簡(jiǎn)之后的打包工具,快才是它的追求目標(biāo)。
文章內(nèi)容只做學(xué)習(xí)記錄,內(nèi)容轉(zhuǎn)自別的大佬博客,主要參考:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-857525.html
Esbuild深度調(diào)研:吹了三年,能上生產(chǎn)了嗎?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-857525.html
到了這里,關(guān)于esbuild 極速的JavaScript構(gòu)建打包工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!