extension.config.js(或 .mjs / .cjs),并把设置应用到所有命令与打包器。
工作原理
在项目根目录(通常和package.json 同级) 添加 extension.config.js。
支持的文件名:
extension.config.jsextension.config.mjsextension.config.cjs
| 键 | 说明 |
|---|---|
browser | 按浏览器目标区分的浏览器默认值。 |
commands | 各命令的默认值(dev、start、preview、build)。 |
extensions | 在各命令中应用的附属扩展(仅加载)。 |
transpilePackages | 在打包前需要编译的包(对 monorepo/workspace 设置很有用)。 |
config | 用于扩展/覆盖生成的 Rspack 配置的钩子。 |
配置文件的环境加载
extension.config.* 在 Node 中运行,应通过 process.env.* 读取值。
- 在求值
extension.config.*之前,Extension.js 会预加载 env 文件。 - 它会先检查项目目录。
- 在 monorepo 中,如果 Extension.js 在项目本地没找到任何
.env*文件,会回退到最近的 workspace 根目录。workspace 根目录是包含pnpm-workspace.yaml的目录。 - 在配置文件中,优先使用内置的 env 预加载,而不是导入
dotenv。
浏览器配置
每个目标需要不同的浏览器默认值?使用browser:
chrome、edge、firefox、chromium、chromium-based、gecko-based、firefox-based。
常用的浏览器字段:
profile、persistProfilepreferencesbrowserFlags、excludeBrowserFlagschromiumBinary、geckoBinaryextensions(仅加载的附属扩展)
浏览器目标能力
| 键 | 作用 |
|---|---|
profile | 设置启动时使用的浏览器 profile 路径(或 profile 行为)。 |
persistProfile | 在多次运行之间复用 profile 数据。 |
preferences | 应用浏览器偏好覆盖。 |
browserFlags | 为浏览器进程添加启动标志。 |
excludeBrowserFlags | 移除你不想要的默认启动标志。 |
chromiumBinary | 使用自定义的 Chromium 系二进制路径。 |
geckoBinary | 使用自定义的 Gecko/Firefox 二进制路径。 |
extensions | 与主扩展一起加载附属扩展。 |
命令配置
用commands 为每个命令定义默认值:
- Extension.js 会把顶层的
extensions与transpilePackages合并到命令默认值中。 - 命令级的值会覆盖顶层的值。
start命令在内部会先运行build,然后preview。Extension.js 会应用commands.start中的设置,包括profile、browserFlags、startingUrl等浏览器启动选项。你也可以把构建相关的设置放进commands.build。
命令通用能力
| 键 | 适用命令 | 作用 |
|---|---|---|
browser | dev、start、preview、build | 设置浏览器或浏览器家族目标。 |
profile | dev、start、preview | 设置浏览器 profile 路径/行为。 |
persistProfile | dev、start、preview | 在多次运行之间复用浏览器 profile 数据。 |
chromiumBinary | dev、start、preview | 使用自定义的 Chromium 系二进制。 |
geckoBinary | dev、start、preview | 使用自定义的 Gecko 系二进制。 |
polyfill | dev、start、build | 在相关场景启用兼容性 polyfill 行为。 |
preferences | dev、start、preview | 应用浏览器偏好覆盖。 |
browserFlags | dev、start、preview | 为浏览器进程添加启动标志。 |
excludeBrowserFlags | dev、start、preview | 移除你不想要的默认启动标志。 |
startingUrl | dev、start、preview | 启动浏览器时打开指定 URL。 |
port | dev、start、preview | 设置 runner/DevTools 端口。 |
host | dev、start、preview | 设置开发服务器主机。用 0.0.0.0 适配 Docker/开发容器。 |
noBrowser | dev、start、preview | 禁用浏览器启动。 |
extensions | dev、start、preview、build | 加载附属扩展(或扩展列表)。 |
install | dev、start、build | 运行前安装缺失的依赖。 |
transpilePackages | dev、start、preview、build | 编译列出的 workspace/外部包。 |
build 命令能力
| 键 | 作用 |
|---|---|
zip | 生成打包好的 zip 产物。 |
zipSource | 额外生成源码包/归档输出,供审查/合规流程使用。 |
zipFilename | 设置自定义的 zip 输出文件名。 |
silent | 减少构建日志输出。 |
dev 命令能力
| 键 | 作用 |
|---|---|
noOpen | 启动开发服务器但不自动打开浏览器。 |
source | 启用基于远程源 URL 的源码检视流程。 |
watchSource | 当被监听的更新发生时重新运行源码检视。 |
sourceFormat | 设置源码输出格式(pretty、json、ndjson)。 |
sourceSummary | 输出紧凑的源码摘要。 |
sourceMeta | 在源码输出中包含页面元数据。 |
sourceProbe | 用特定 CSS 选择器探测源码输出。 |
sourceTree | 控制紧凑的扩展树输出。 |
sourceConsole | 在源码输出中包含控制台摘要。 |
sourceDom | 在源码输出中包含 DOM 快照/差异。 |
sourceMaxBytes | 限制源码输出的载荷大小。 |
sourceRedact | 控制源码遮蔽策略。 |
sourceIncludeShadow | 控制 Shadow DOM 的包含策略。 |
sourceDiff | 在源码监听更新时包含 diff 元数据。 |
日志能力
| 键 | 适用命令 | 作用 |
|---|---|---|
logs | dev、start、preview | 设置最低日志级别(off 到 all)。 |
logContext | dev、start、preview | 按上下文过滤日志(background、content 等)。 |
logFormat | dev、start、preview | 设置输出格式(pretty、json、ndjson)。 |
logUrl | dev、start、preview | 按 URL 模式过滤日志。 |
logTab | dev、start、preview | 按 tab ID 过滤日志。 |
Rspack 配置
需要更高级的打包器自定义?用config 给生成的 Rspack 配置打补丁:
config 也可以是一个对象,Extension.js 会把它合并到生成的配置之上。
完整示例
最佳实践
- 把浏览器特定的值放进
browser:让命令定义专注于工作流,而不是浏览器内部细节。 - 有意识地使用顶层默认值:把共享的
extensions/transpilePackages放在根级,只在必要时覆盖。 - 优先使用
chromiumBinary/geckoBinary这类命名:与当前命令与类型接口一致。 - 保持
config钩子最小化:只添加 Extension.js 一等公民选项未覆盖的内容。

