Vite 3.0 正式發(fā)布,下一代前端工具鏈!
大家好,我是 CUGGZ。
7 月 13 日,Vite 3.0 正式發(fā)布,它被稱為下一代的前端工具鏈。Vite 團(tuán)隊決定至少每年發(fā)布一個新的 Vite 主要版本,以與 Node.js 的 EOL 保持一致,并借此機(jī)會定期審查 Vite 的 API,為生態(tài)系統(tǒng)中的項目提供較短的遷移路徑。
去年 2 月,Vite 2 正式發(fā)布。從那時起,它的使用率不斷增長,每周 npm 下載量超過 100 萬次。發(fā)布后迅速形成了龐大的生態(tài)系統(tǒng)。Vite 正在推動 Web 框架的新一輪創(chuàng)新競賽。Nuxt 3 默認(rèn)使用 Vite。SvelteKit、Astro、Hydrogen 和 SolidStart 都是用 Vite 構(gòu)建的。Laravel 現(xiàn)在決定默認(rèn)使用 Vite。Vite Ruby 展示了 Vite 如何改進(jìn) Rails DX。Vitest 作為 Jest 的 Vite-native 替代品正在取得長足進(jìn)步。Storybook 將 Vite 作為官方構(gòu)建器。而且名單還在繼續(xù)不斷擴(kuò)大。大多數(shù)這些項目的維護(hù)者都參與了 Vite 核心的改進(jìn),與 Vite團(tuán)隊和其他貢獻(xiàn)者密切合作。
全新文檔
全新的 v3 文檔發(fā)布,可以前往 vitejs.dev 查看。Vite 現(xiàn)在使用新的 VitePress 默認(rèn)主題,其支持黑暗模式。
生態(tài)系統(tǒng)中的幾個項目的文檔也已經(jīng)遷移到了VitePress( Vitest、vite-plugin-pwa 和 VitePress)。
如果需要訪問 Vite 2 的文檔,可以前往 v2.vitejs.dev 查看。除此之外,還有一個新的 main.vitejs.dev,每次提交到 Vite 的主分支都會自動部署。這在測試 beta 版本或為核心開發(fā)做出貢獻(xiàn)時很有用。
文檔新增了一個正式的西班牙語翻譯,目前官網(wǎng)文檔提供了英語、簡體中文、日語、西班牙語版本。
創(chuàng)建 Vite 入門模板
create-vite 模板是一個很好的工具,可以用你最喜歡的框架快速測試 Vite。在 Vite 3 中,所有的模板都有一個與新文檔一致的新主題。
在線體驗?zāi)0妫?/p>
- Vite:https://stackblitz.com/edit/vitejs-vite-qff3vk?file=index.html&terminal=dev
- Vite + Vue:https://stackblitz.com/edit/vitejs-vite-4hxjez?file=index.html&terminal=dev
- Vite + Svelte:https://stackblitz.com/edit/vitejs-vite-f3pc98?file=index.html&terminal=dev
- Vite + React:https://stackblitz.com/edit/vitejs-vite-s1q16q?file=index.html&terminal=dev
- Vite + Preact:https://stackblitz.com/edit/vitejs-vite-rndlvv?file=index.html&terminal=dev
- Vite + Lite:https://stackblitz.com/edit/vitejs-vite-8zaxwn?file=index.html&terminal=dev
該主題現(xiàn)在由所有模板共享。對于更完整的解決方案,包括linting、測試設(shè)置和其他功能,有一些基于 Vite 的官方模板,如create-vue 和 create-svelte。Awesome Vite 上有一個社區(qū)維護(hù)的模板列表。
Awesome Vite:https://github.com/vitejs/awesome-vite#templates。
開發(fā)改進(jìn)
Vite CLI
VITE v3.0.0 ready in 320 ms
? Local: http://127.0.0.1:5173/
? Network: use --host to expose
除了 CLI 的美觀改進(jìn)之外,默認(rèn)的 dev server 的端口現(xiàn)在是 5173,而 preview server 的端口現(xiàn)在是 4173。此更改可確保 Vite 避免與其他工具發(fā)生沖突。
改進(jìn)的 WebSocket 連接策略
Vite 2 的痛點(diǎn)之一是在代理之后運(yùn)行時配置服務(wù)器。Vite 3 更改了默認(rèn)連接方案,因此在大多數(shù)情況下都是開箱即用的。所有這些設(shè)置現(xiàn)在都通過 vite-setup-catalogue 作為 Vite 生態(tài)系統(tǒng) CI 的一部分進(jìn)行測試。
冷啟動改進(jìn)
Vite 現(xiàn)在可以避免在冷啟動期間,當(dāng)插件在抓取初始靜態(tài)導(dǎo)入的模塊時注入導(dǎo)入時完全重新加載。
import.meta.glob
import.meta.glob 支持被重寫。下面是 Glob Import Guide 中的新功能:
- 多個匹配模式可以作為數(shù)組傳遞。
import.meta.glob(['./dir/*.js', './another/*.js'])
- 現(xiàn)在支持反面匹配模式(以!為前綴)以忽略某些特定文件。
import.meta.glob(['./dir/*.js', '!**/bar.js'])
- 可以指定具名導(dǎo)入以改進(jìn)tree-shaking。
import.meta.glob('./dir/*.js', { import: 'setup' })
- 可以使用 query 選項來提供對導(dǎo)入的自定義查詢,以供其他插件使用。
import.meta.glob('./dir/*.js', { query: { custom: 'data' } })
- eager 作為 Glob 導(dǎo)入的一個標(biāo)識傳入。
import.meta.glob('./dir/*.js', { eager: true })
將 WASM import 與未來標(biāo)準(zhǔn)對齊
修改了 WebAssembly import API,以避免與未來的標(biāo)準(zhǔn)發(fā)生沖突,并使其更加靈活:
import init from './example.wasm?init'
init().then((instance) => {
instance.exports.test()
})
構(gòu)建改進(jìn)
ESM 成為 SSR 構(gòu)建的默認(rèn)格式
生態(tài)系統(tǒng)中的大多數(shù)SSR框架已經(jīng)在使用ESM構(gòu)建。因此,Vite 3 使 ESM 成為 SSR 構(gòu)建的默認(rèn)格式。這使我們能夠簡化以前的 SSR 外部化啟發(fā)式方法,默認(rèn)情況下外部化依賴項。
改進(jìn)的 Relative Base 支持
Vite 3 現(xiàn)在正確支持 Relative Base(使用base: ''),允許將構(gòu)建的產(chǎn)物部署到不同的 base,而無需重新構(gòu)建。這在構(gòu)建時不知道 base 的情況時很有用。
減小構(gòu)建體積
Vite 關(guān)心它的發(fā)布和安裝足跡;快速安裝新應(yīng)用程序是一項功能。Vite 打包了它的大部分依賴項,并盡可能地嘗試使用現(xiàn)代輕量級替代方案。繼續(xù)這個持續(xù)的目標(biāo),Vite 3 的發(fā)布規(guī)模比 v2 小了 30%。
Bug 修復(fù)
在過去的三個月里,Vite 的開放 issues 從 770 減少到了 400。而這一下降是在新開放的 PR 處于歷史最高水平的情況下實(shí)現(xiàn)的。
兼容性說明
- Vite 不再支持 Node.js 12,現(xiàn)在需要 Node.js 14.18+。
- Vite 現(xiàn)在以 ESM 的形式發(fā)布。
- 現(xiàn)代瀏覽器 Baseline 現(xiàn)在支持本地 ES 模塊、本地 ESM 動態(tài)導(dǎo)入和import.meta 功能的瀏覽器。
Vite 核心升級
在開發(fā) Vite 3 的同時,還改進(jìn)了合作者對 Vite 核心的貢獻(xiàn)體驗。
- 單元和 E2E 測試已遷移到 Vitest,提供更快、更穩(wěn)定的 DX。
- VitePress 構(gòu)建現(xiàn)在作為 CI 的一部分進(jìn)行測試。
- Vite 升級到 pnpm 7,跟隨生態(tài)系統(tǒng)的其余部分。
- Playgrounds 已從 packages 目錄移到/playgrounds。
- packages 和 playgrounds 現(xiàn)在是"type": "module"。
- 插件現(xiàn)在使用 unbuild 進(jìn)行構(gòu)建,并且plugin-vue-jsx? 和plugin-legacy 已移至 TypeScript。
生態(tài)系統(tǒng)已為v3做好準(zhǔn)備
Vite 團(tuán)隊與生態(tài)系統(tǒng)中的項目密切合作,以確保由 Vite 支持的框架為 Vite 3 做好準(zhǔn)備。vite-ecosystem-ci 允許我們針對 Vite 的主分支運(yùn)行生態(tài)系統(tǒng)中領(lǐng)先參與者的 CI,并在引入回歸之前及時收到報告。v3 版本很快就會與大多數(shù)使用 Vite 的項目兼容。
下一步
Vite 團(tuán)隊將在接下來的幾個月內(nèi)確保所有基于 Vite 構(gòu)建的項目都能順利過渡。
Rollup 團(tuán)隊正在開發(fā)下一個主要版本,并將在接下來的幾個月內(nèi)發(fā)布。一旦 Rollup 插件生態(tài)系統(tǒng)有時間更新,Vite 團(tuán)隊將跟進(jìn)一個新的主要版本。這將是另一個在今年引入更重大變化的機(jī)會,可以利用這些變化來穩(wěn)定此版本中引入的一些實(shí)驗性功能。