Skip to main content
使用 install 把一个受管理的浏览器运行时加入 Extension.js 缓存。 当你希望在 devbuildstartpreview 中使用稳定一致的浏览器二进制时,这个命令最有用。它支持 Chrome for Testing、Chromium、Firefox 与 Edge。

什么时候使用 install

  • 你需要一致、可复现的浏览器二进制,用于持续集成(CI)、自动化或团队一致的本地运行。
  • 你想用 Chrome for Testing,而不是依赖你系统上恰好安装的某个 Chrome 版本。
  • 你正在用受管理的 Firefox 或 Edge 运行时搭建跨浏览器测试。

为什么 Extension.js 会下载一个浏览器

运行类命令优先使用受管理的浏览器运行时,而不是你日常使用的那个浏览器。
  • 受管理的二进制是版本固定的。dev、CI 运行和团队成员启动的都是同一个构建。
  • Chrome for Testing 是为自动化而构建的。较新的品牌版 Chrome 构建(150+)可能会丢弃用来加载你扩展的 --load-extension 开关。
  • 受管理的运行时在一个隔离的配置文件中运行。它永远不会碰你的个人浏览器、它的配置文件或它的设置。
你不必提前运行 install。当请求的目标没有可用的二进制时,运行类命令会打印出准确的安装命令。

跳过受管理下载

你可以直接针对一个已经安装的浏览器开发,无需任何下载:
  • 按名称运行一个分支浏览器:extension dev --browser=brave 会为你定位已安装的 Brave。见运行其他浏览器
  • 固定任意二进制:给 devstartpreview--chromium-binary <path>--gecko-binary <path>。固定值会覆盖所有定位器。
  • 请求 edge 时,如果没有受管理的 Edge,会启动你系统上已安装的 Edge。
  • 请求 chrome 时会拒绝品牌版的系统 Chrome,并要求改用 Chrome for Testing。
  • 如果无论如何都要运行品牌版 Chrome,用 --chromium-binary 固定它。

当 Edge 已经安装时

--browser=edge 会自己找到系统 Edge,所以你可以跳过 extension install edge。只有当你想要一份固定的受管理副本用于自动化时,才运行 extension install edge 在 Linux 上,受管理的 Edge 下载需要一个有 sudo 权限的交互会话。当这次下载失败且系统中存在 Edge 时,安装器会报告系统二进制并以它成功完成。

标准用法

针对单个浏览器,使用位置参数形式:
只有在需要多个目标、浏览器家族或 all 时才使用 --browser

install 命令的能力

用法

参数与 flag

这里的 all 指什么

extension install --browser all 会安装 chromechromiumedgefirefox。这和运行类命令上的 --browser all 不同,后者只展开为 chromeedgefirefox。安装集合还包含 Chromium,因为它是 devstart 的默认启动目标。

--output json 输出机器可读结果

--output json 会在 stdout 上打印一个 schema-1 信封:
  • 成功的安装会打印一个 status: "installed" 帧,安装好的浏览器在 value.browsers 中。
  • --where 会打印一个 status: "located" 帧,解析出的路径在 value.paths 中。
  • 下载失败会在进程以 1 退出前打印 ok: false,其 error.code: "E_BROWSER_DOWNLOAD"

示例

安装 Chrome for Testing

一条命令安装多个目标

显示 Chrome 的受管理安装路径

缓存位置

默认情况下,Extension.js 把受管理的浏览器存放在每用户的稳定缓存中:
  • macOS:~/Library/Caches/extension.js/browsers
  • Linux:~/.cache/extension.js/browsers$XDG_CACHE_HOME/extension.js/browsers
  • Windows:%LOCALAPPDATA%\extension.js\browsers
你可以用 EXT_BROWSERS_CACHE_DIR 覆盖缓存根目录。

缓存里放了什么

每个浏览器在缓存根目录下都有自己的目录,但目录内部的布局取决于下载引擎:
  • chromechromiumfirefox 来自 @puppeteer/browsers。每个浏览器目录里会有它那套嵌套的平台与版本子目录。
  • edge 来自 playwright install msedge,它用自己的结构摆放二进制。
  • safari 没有可下载的东西。Safari 随 macOS 一起提供,构建还需要完整的 Xcode app,所以 extension install safari 会带着解释拒绝执行。
  • 像 Brave 这样的具名分支永远不会被下载。请改用 --chromium-binary--gecko-binary 指向它们。
请用 --where 而不要把路径写死,因为嵌套布局可能随下载引擎变化。

项目本地的二进制

设置 EXTENSIONJS_BINARIES_IN_DIST=1,可以让运行类命令在项目内的 dist/extension-js/binaries 下解析受管理的二进制,而不是使用共享的每用户缓存。这适合沙箱化或完全自包含的项目配置。

最佳实践

  • 在 CI 中使用 install,固定一个稳定的浏览器二进制,而不是依赖 runner 提供的版本。
  • 优先使用 chrome 而不是 chromium:Chrome for Testing 更贴近稳定版 Chrome 的行为。
  • 使用 --where 在围绕受管理浏览器做脚本化自动化之前先确认缓存路径。
  • install 只管理 Extension.js 缓存中的浏览器,不会修改系统上已有的浏览器安装。

行为说明

  • chrome 会安装 Chrome for Testing,而不是依赖系统中的 Google Chrome app。
  • 在 Linux 上,edge 可能需要一个有权限的交互会话。

下一步