Vite 的好與壞
作者:范文杰
來源:SegmentFault 思否社區(qū)
一、Vite 是什么
2020年4月,尤大大發(fā)了這么一個(gè)推:

隨后,2021年2月,Vite 2.0 它來了,上來就是一套組合拳:
基于 esbuild 實(shí)現(xiàn)的極速開發(fā)體驗(yàn) 多框架支持 兼容 Rollup 的插件機(jī)制與 API SSR 支持 舊瀏覽器支持
二、Vite 的優(yōu)勢(shì)
2.1 真 TM 快


現(xiàn)代瀏覽器大多數(shù)已經(jīng)原生支持 ESM 規(guī)范,構(gòu)建工具 —— 特別是開發(fā)環(huán)境下已經(jīng)沒有太大必要為了低版本兼容把大量的時(shí)間花在編譯打包上了!
預(yù)編譯:npm 包這類基本不會(huì)變化的模塊,使用 Esbuild 在 預(yù)構(gòu)建 階段先打包整理好,減少 http 請(qǐng)求數(shù)
按需編譯:用戶代碼這一類頻繁變動(dòng)的模塊,直到被使用時(shí)才會(huì)執(zhí)行編譯操作
客戶端強(qiáng)緩存:請(qǐng)求過的模塊會(huì)被以 http 頭
max-age=31536000,immutable設(shè)置為強(qiáng)緩存,如果模塊發(fā)生變化則用附加的版本 query 使其失效產(chǎn)物優(yōu)化:相比于 Webpack ,Vite 直接錨定高版本瀏覽器,不需要在 build 產(chǎn)物中插入過多運(yùn)行時(shí)與模板代碼
內(nèi)置更好的分包實(shí)現(xiàn):不需要用戶干預(yù),默認(rèn)啟用一系列智能分包規(guī)則,盡可能減少模塊的重復(fù)打包
更好的靜態(tài)資源處理:Vite 盡量避免直接處理靜態(tài)資源,而是選擇遵循 ESM 方式提供服務(wù),例如引入圖片
import img from 'xxx.png'語句,執(zhí)行后img變量只是一個(gè)路徑字符串。

2.2 簡單
yarn create @vitejs/app my-vue-app --template vue
2.3 生態(tài)
- 與 Vue 解耦,兼容支持 React、Svelte、Preact、Vanilla 等,這意味著 Vite 可以被應(yīng)用在大多數(shù)現(xiàn)代技術(shù)棧中
- 與 Rollup 極其接近的插件接口,這意味著可以復(fù)用 Rollup 生態(tài)中大部分已經(jīng)被反復(fù)錘煉的工具
三、Vite 的劣勢(shì)
3.1 兼容性
build.polyfillDynamicImport 配置項(xiàng)配合@vitejs/plugin-legacy 打包出一個(gè)看起來兼容性比較好的版本,我相信這一點(diǎn)會(huì)隨時(shí)間慢慢被抹平。3.2 缺少 Show Case
數(shù)據(jù)來自谷歌指數(shù)3.3 代價(jià)
三、總結(jié)
打包 不是目的,運(yùn)行 才是,2021年了,能夠交給瀏覽器做的事情就交給瀏覽器吧
一個(gè)靈活的框架,對(duì)作者而言可能意味著逐步失控的開發(fā)量;對(duì)用戶而言可能意味高學(xué)習(xí)成本,以及不斷重復(fù)的類似空格好還是 tab 好的爭論。那么,一套內(nèi)置好各種業(yè)界 最佳實(shí)踐,沒有太多定制空間的工具,某些情況下反而能提升大家的效率

