Skip to main content
為一個或多個瀏覽器目標產生正式版擴充功能產物。 build 會以 production 模式編譯你的擴充功能,並把輸出寫入 dist/<browser> 針對 monorepo/submodule 專案,請參見 環境變數 中的設定階段環境變數解析(先尋找專案根目錄,再退回到 workspace 根目錄)。

何時使用 build

  • 為 Chrome Web Store、Edge Add-ons 或 Firefox Add-ons 準備擴充功能套件。
  • 在持續整合(CI)工作中產生可重現的正式版產物。
  • 在送審前驗證正式版打包輸出,以及各瀏覽器目標之間的差異。

Build 指令功能

用法

Build 輸出

執行 build 後,Extension.js 會為所選的瀏覽器目標產生最佳化檔案。輸出會放到 dist/,每個目標一個子資料夾。每個資料夾包含打包後的 JavaScript、CSS、HTML 與所需的執行階段資源。
對 TypeScript 專案,build 也會重新產生 extension-env.d.ts 全域型別宣告(與 dev 產生的同一份檔案), 讓 CI 上的 tsc --noEmit 不論先前是否跑過 dev 都能順利通過。 純 JavaScript 專案則會跳過這個步驟。
範例輸出結構:

瀏覽器目標矩陣

引擎目標對 build 的意義

build 不會啟動瀏覽器,因此引擎目標在這裡並不指向某個執行檔——但它們仍會產出一個獨立的產物,而不是具名目標建置的改名副本:
  • 獨立的輸出目錄。 --browser=chromium-based 輸出到 dist/chromium-based,與 devpreviewstart 在該目標下使用的目錄一致——以自訂 Chromium 執行檔開發的專案,建置產物路徑完全對應。
  • 獨立的 env 解析。 .env.chromium-based.env.chromium-based.production 優先於家族層級的 .env.chromium/.env.chrome/.env.edge,且打包後的程式碼中 EXTENSION_BROWSER === "chromium-based"——程式碼與設定可以據此區分「通用 Chromium」與特定商店建置。
  • 獨立的 manifest 前綴。 manifest.json 中的 chromium-based: 鍵會作為該目標最具體的匹配生效,疊加在家族層級的 chrome:/chromium:/edge: 鍵之上。
gecko-based 相對 firefox 的行為完全相同。建置不需要瀏覽器執行檔——--chromium-binary/--gecko-binary 只對會啟動瀏覽器的指令有意義。

引數與旗標

共用全域選項

也支援 全域旗標

模式覆寫

--mode 會覆寫此次建置的打包工具模式與 NODE_ENV。接受 developmentproductionnone。當你需要在 staging 或除錯場景使用非正式版打包時,可用它對齊 Vite/webpack 的工作流程。
無效的值會以錯誤結束;預設仍為 production

Zip 行為

範例

使用 zip 輸出與自訂檔名建置

此範例的建置會以 Edge 與 Chrome 為目標,將輸出壓縮成 zip,並儲存為 my-extension.zip

帶有 polyfill 支援的建置

此範例的建置會以 Chrome 與 Firefox 為目標,並在合適情境下包含 polyfill 支援。

同時建置原始碼與產物 zip

最佳實務

  • 檢視建置記錄: 每次建置後檢查警告與遺漏的資源。
  • 最佳化 manifest:manifest.json 與每個目標瀏覽器相容。
  • 有意義地命名產物: 使用 --zip-filename 讓 CI 產物有穩定名稱。
  • 驗證每個目標輸出: 在發布前檢查各個 dist/<browser> 資料夾。

後續步驟