Skip to main content
用同一份擴充功能為多個瀏覽器建置與封裝,輸出可預期。 把同一份擴充功能上架到 Chrome、Edge 與 Firefox,不需要維護分別的建置腳本。Extension.js 會為每個目標執行正式建置,將產物寫入 dist/<browser>,也能為發佈產生 zip 封裝。

運作方式

執行正式建置:
預設的瀏覽器目標是 chromium,除非你覆寫它。

瀏覽器選擇

你可以鎖定特定的瀏覽器/引擎:
支援的值包括:
  • chrome
  • edge
  • firefox
  • chromium
  • chromium-based
  • gecko-based / firefox-based(別名)
你也可以在一條指令中執行建置矩陣:
這會依序為 chromeedgefirefox 進行建置。

輸出結構

每個目標會寫入自己的資料夾:
  • dist/chrome
  • dist/edge
  • dist/firefox
  • dist/chromium
  • dist/chromium-based
  • dist/gecko-based

建置能力

產生 zip 檔

--zip 為每個目標輸出產生發佈 zip:
預設 zip 名稱會使用清理後的 manifest name + version,例如:
  • my-extension-1.0.0.zip
自訂檔名:
這會在目標 dist/<browser> 資料夾內建立 my-release.zip

包含原始碼封存檔

使用 --zip-source 在發佈輸出旁邊另外產生原始碼封存檔。 --zip-source 會產生:
  • dist/<name>-<version>-source.zip

Firefox 商店審核的資料收集權限

自 2025 年 11 月起,addons.mozilla.org 會拒絕所有 manifest 中缺少 browser_specific_settings.gecko.data_collection_permissions 的新擴充功能,Mozilla 也已宣佈該鍵將在 2026 年內對所有擴充功能強制生效。即使擴充功能不傳輸任何資料,也必須明確宣告:
extension create 鷹架產生的新專案已包含此宣告,firefox: 前綴讓它不會進入 Chromium 建置。正式環境的 Firefox 建置會在最終 manifest 缺少該鍵時發出警告,因此缺失宣告會在建置時暴露,而不是等到商店審查。 擴充功能確實傳輸使用者資料卻宣告 "none" 屬於違反 AMO 政策的行為。如果你的擴充功能收集或傳輸任何資料,請宣告對應的分類。分類清單見 Mozilla 的內建資料同意文件。Firefox 桌面版從 140 起(Android 從 142 起)解析該鍵,Manifest V2 與 V3 均可安全使用。

Polyfill 瀏覽器 API

如果你的程式碼依賴 Gecko 風格的 browser.* API,又需要 Chromium 相容性,可以啟用 --polyfill

最佳實務

  • 在持續整合(CI)中為每個目標分別建置:把每個瀏覽器輸出視為獨立產物。
  • 使用瀏覽器矩陣指令做一致性檢查:在同一個流水線步驟內及早抓到目標專屬問題。
  • 有意識地進行封裝:用 --zip 上架到應用商店,用 --zip-source 產生可追溯的原始碼產物。
  • 保留明確的目標設定:用 extension.config.* 的指令/瀏覽器預設值來確保建置可重現。

下一步