繁體中文(台灣)
從 Parcel 到 Vite:一個十萬行代碼遷移的短篇故事
我們已經將三個前端專案從 Parcel 遷移到 Vite,過程非常順利。
背景故事
在 Logto,我們有三個主要的前端專案:登入體驗、控制台和即時預覽。這些專案全部使用 TypeScript、React 和 SASS 模組;總共大約有十萬行代碼。
我們喜歡 Parcel 的簡單和零配置。我仍然記得第一次使用 Parcel 時被它的簡易設置驚艷到了。你只需運行 parcel index.html
,然後,所有的必要依賴項都已安裝,專案就能運行了。如果你是個「經驗豐富」的開發者,可能會覺得相較於以往使用 Gulp 和 Webpack 的設置,這是天壤之別。Parcel 就像一根魔杖。
Parcel 的簡單是我們長期使用它的主要原因,即使它有時候脾氣不太好。例如:
- 有時 Parcel 會因為找不到實際上存在的 chunk 文件而無法完成打包。
- 它需要一些複雜的配置來與我們的 monorepo 設置配合運作。
- 它本身並不支持 MDX 3,因此我們必須為其建立自訂轉換器。
- 它不支持手動 chunks(在撰寫本文時,手動 chunks 功能仍在實驗階段),對大多數情況來說還好,但有時你會需要它。
那麼為什麼我們決定遷移到其他工具?
- 我們被鎖定在 2023 年 6 月發佈的 Parcel 2.9.3 每次新版本發佈後,我們都嘗試升級,但總是因為構建錯誤而失敗。
- 最新的 Parcel 版本是 2.12.0,發佈於 2024 年 2 月。儘管幾乎每天都有更新提交,但自此以來再也沒有新的釋出。
有人甚至發起了一個討論來詢問Parcel 是否已經死了。官方的回答是否定的,Parcel 仍然活著,但處於「我們正在進行一次大型重構,沒有時間推出小更新」的階段。對我們來說,這就像是「鴨子死」:最新的可用版本已經是一年前的,而我們不知道下一個版本會在何時釋出。它看起來像死了,行為像死了,對我們來說它就是死了。
為什麼選擇 Vite?
我們從 Vitest 認識了 Vite。幾個月前,我們對 Jest 的 ESM 支持(在測試中)感到厭倦,想要試試新東西。Vitest 憑藉本地的 ESM 支持和 Jest 兼容贏得了我們的心。它提供了出色的開發者體驗,並且是由 Vite 驅動的。
現狀
你可能有不同的專案設置,但通常你可以在 Vite 生態系統中找到插件替換品。以下是我們進行遷移時的設置:
- Monorepo: 我們使用 PNPM (v9) workspaces 來管理我們的 monorepo。
- 模組: 我們為所有專案使用 ESM 模組。
- TypeScript: 我們為所有專案使用 TypeScript (v5.5.3) 及路徑別名。
- React: 我們為所有前端應用使用 React (v18.3.1)。
- 樣式: 我們使用 SASS 模組來進行樣式定義。
- SVG: 我們將 SVG 轉為 React 組件進行使用。
- MDX: 我們支持帶有 GitHub 風格 Markdown 及 Mermaid 插圖的 MDX。
- 延後加載: 我們需要延後加載部分網頁和組件。
- 壓縮: 我們為生產構建生成壓縮資源(gzip 和 brotli)。
遷移過程
我們首先創建了一個新的 Vite 專案並試驗其工作方式,遷移過程相當順暢,實際遷移只用了幾天。