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 均可安全使用。

为浏览器 API 打 polyfill

如果你的代码依赖 Gecko 风格的 browser.* API,并且需要 Chromium 兼容性,请启用 --polyfill

最佳实践

  • 在持续集成 (CI) 中按目标构建:把每个浏览器的产物当作独立产物对待。
  • 用浏览器矩阵命令做对等校验:在同一条流水线步骤里尽早发现特定目标的问题。
  • 有意识地打包:用 --zip 进行商店上传,用 --zip-source 留下可追溯的源码产物。
  • 明确目标配置:通过 extension.config.* 的命令/浏览器默认值实现可复现的构建。

下一步