manifest.json 與現代原始碼變成可執行的擴充功能。Extension.js 是內建打包工具的 CLI 框架。CRXJS 是一個 plugin,在你自己的 Vite 設定中加上擴充功能輸出。本頁是一份事實性的比較,讓你依自己的專案做選擇。
該選哪一個?
選擇 Extension.js,如果你…
- 想要一個 CLI 來開啟瀏覽器、存檔即重新載入、依瀏覽器建置,並打包上架用的 zip。
- 要用一份
manifest.json發佈到 Chrome、Edge、Firefox 與 Safari。 - 不想在專案裡寫打包工具設定。
選擇 CRXJS,如果你…
- 已經有一個 Vite 應用程式,想在其中加上擴充功能輸出。
- 依賴 Vite plugin,並想繼續使用它們。
- 可以接受自己在瀏覽器中載入未封裝的建置結果。
一覽表
思維模型
Extension.js 內建打包工具。 你撰寫manifest.json 並引用真實檔案。CLI 會編譯它們、為每個瀏覽器過濾 manifest,並打包結果。你從不設定打包工具,打包工具升級由框架負責。
CRXJS 在你的打包工具裡運作。 你在 vite.config 中加入 crx({ manifest }),Vite 會在你的應用程式旁建置擴充功能。你保有對 Vite 與所有 Vite plugin 的完整控制。每個 Vite 主版本都需要 CRXJS 做相容工作,這也是 Vite 8 的 fileName 錯誤曾經存在一段時間的原因。
開發循環
Extension.js
CRXJS
跨瀏覽器建置
- Extension.js 用
--browser從同一份原始碼建置所有瀏覽器。 - 瀏覽器差異寫在依瀏覽器前綴的 manifest 欄位中,例如
chrome:與firefox:。 - CRXJS 每次執行建置一個目標,在 plugin 選項中設定
browser: 'firefox'即可建置 Firefox 版本。 - CRXJS 的文件沒有 Safari 指南。
打包
dist/<browser>,並在旁邊為每個瀏覽器產生一個 zip。使用 CRXJS 時,你需要用自己的腳本或工具打包 Vite 的輸出資料夾。
何時遷移
當你希望 CLI 啟動瀏覽器、一次建置多個瀏覽器,或發佈到 Safari 時,可以從 CRXJS 遷移到 Extension.js。你的元件、chrome.* 呼叫與樣式都可以沿用。從 CRXJS 遷移會一步步帶你完成。

