跳轉到主要內容
瀏覽器擴充功能框架負責瀏覽器不會處理的工作:為每個擴充功能介面編譯 TypeScript 與現代 JavaScript、把 manifest 連結到實際的輸出檔案、在開發期間重新載入 service worker 與 content script,並產出各瀏覽器專屬的建置結果。本頁會比較目前活躍的選項,讓你在資訊充足的情況下做出選擇。

各個框架

維度Extension.jsWXTCRXJSPlasmo
模型manifest.json 為唯一來源檔案慣例 + 設定讀取 manifest 的 Vite plugin檔案慣例
打包工具Rspack(內建,零設定)ViteVite(plugin 層)Parcel
跨瀏覽器同一份原始碼支援 Chrome、Edge、FirefoxChrome、Firefox、支援 MV2聚焦 Chromium鎖定 Chrome、Firefox
設定無需任何設定wxt.config.tsvite.config.ts + pluginpackage.json 的 manifest 欄位
與打包工具耦合度內部細節須跟著 Vite 主版本打包工具升級可能造成中斷綁定 Parcel
有兩項結構性的差異,比任何單一功能列都更值得關注:
  • manifest 放在哪裡。 Extension.js 讀取你的 manifest.json,並編譯它所宣告的所有內容。WXT 與 Plasmo 則是從檔案慣例與設定產生 manifest。CRXJS 雖然會讀取 manifest,但會透過 Vite 的 plugin API 解析,這也是為什麼打包工具升級可能讓它中斷(參見 Vite 8 的 fileName 錯誤)。
  • 由誰掌控打包工具。 包裝通用打包工具的框架,就會繼承該打包工具的破壞性變更。Extension.js 把打包工具視為內部細節:你永遠不會去設定它,升級的問題由框架負責,而不是你。

詳細比較與遷移指南

不需投入即可試用

只要一行指令,就能執行任何擴充功能範本,或 GitHub 上任何擴充功能的儲存庫:
npx extension@latest dev
你的元件、chrome.* 呼叫與樣式都能從任何這些框架延續過來;遷移指南 涵蓋需要調整的串接細節。