Skip to main content
用一份配置文件同时设置浏览器默认值、命令行为与打包器自定义。 在团队间共享浏览器默认值、命令选项和构建设置。不再反复输入 CLI 参数。Extension.js 会从项目根目录读取 extension.config.js(或 .mjs / .cjs),并把设置应用到所有命令与打包器。

工作原理

在项目根目录(通常和 package.json 同级) 添加 extension.config.js 支持的文件名:
  • extension.config.js
  • extension.config.mjs
  • extension.config.cjs
顶层键:

类型安全的配置

Extension.js 从 extension 包中导出 FileConfig 类型,让编辑器可以对你的配置进行自动补全与类型检查。用 JSDoc 的 @type 标签标注导出即可 —— 它在 extension.config.js.mjs.cjs 中都能工作,且无需构建步骤:

配置文件的环境加载

extension.config.* 在 Node 中运行,应通过 process.env.* 读取值。
  • 在求值 extension.config.* 之前,Extension.js 会预加载 env 文件。
  • 它会先检查项目目录。
  • 在 monorepo 中,如果 Extension.js 在项目本地没找到任何 .env* 文件,会回退到最近的 workspace 根目录。workspace 根目录是包含 pnpm-workspace.yaml 的目录。
  • 在配置文件中,优先使用内置的 env 预加载,而不是导入 dotenv

浏览器配置

每个目标需要不同的浏览器默认值?使用 browser
支持的浏览器键包括:chromeedgefirefoxchromiumchromium-basedgecko-basedfirefox-based 常用的浏览器字段:
  • profilepersistProfile
  • preferences
  • browserFlagsexcludeBrowserFlags
  • chromiumBinarygeckoBinary
  • extensions(仅加载的附属扩展)

浏览器目标能力

命令配置

commands 为每个命令定义默认值:
说明:
  • Extension.js 会把顶层的 extensionstranspilePackages 合并到命令默认值中。
  • 命令级的值会覆盖顶层的值。
  • start 命令在内部会先运行 build,然后 preview。Extension.js 会应用 commands.start 中的设置,包括 profilebrowserFlagsstartingUrl 等浏览器启动选项。你也可以把构建相关的设置放进 commands.build

命令通用能力

build 命令能力

dev 命令能力

日志能力

Rspack 配置

需要更高级的打包器自定义?用 config 给生成的 Rspack 配置打补丁:
config 也可以是一个对象,Extension.js 会把它合并到生成的配置之上。

完整示例

最佳实践

  • 把浏览器特定的值放进 browser:让命令定义专注于工作流,而不是浏览器内部细节。
  • 有意识地使用顶层默认值:把共享的 extensions / transpilePackages 放在根级,只在必要时覆盖。
  • 优先使用 chromiumBinary/geckoBinary 这类命名:与当前命令与类型接口一致。
  • 保持 config 钩子最小化:只添加 Extension.js 一等公民选项未覆盖的内容。

下一步