Skip to main content
在 Windows Subsystem for Linux(WSL)中运行完整的 Extension.js 开发循环,浏览器会自动从边界的任意一侧解析出来。 Extension.js 通过 WSL_DISTRO_NAMEWSL_INTEROPWSLENV 变量,或者 Microsoft 内核签名来检测 WSL。随后它会按一个固定的顺序去解析浏览器二进制。

解析顺序

  1. 优先使用 Linux 原生浏览器。 当存在可用的 GUI 显示(已设置 DISPLAYWAYLAND_DISPLAY)时,Extension.js 会检查已知的 Linux 安装位置。例如 /opt/google/chrome/chrome/usr/bin/chromium/snap/bin/chromium/usr/bin/firefox。使用 Linux 浏览器可以让整个开发循环都留在 Linux 一侧。
  2. 回退到 /mnt/c 下的 Windows .exe 当不存在 Linux 浏览器时,Extension.js 会去找 Windows 上的安装。它会检查 /mnt/c/Program Files/Google/Chrome/Application/chrome.exe,以及对应的 Chromium、Edge 和 Firefox 路径,还有它们的 Program Files (x86) 变体。
  3. 启动时重试一次。 如果选中的二进制启动失败,Extension.js 会用 Windows 二进制再重试一次,然后才放弃。
你也可以通过传入显式路径来完全跳过这套顺序:

Chrome 包装脚本的替换

在 Linux 上,google-chrome 及其渠道变体都是 shell 包装脚本,而不是真正的二进制。这个包装脚本在 exec 启动 Chrome 时会关闭额外的文件描述符,从而破坏开发会话所依赖的 --remote-debugging-pipe 通道。 在带 GUI 的 WSL 下,Extension.js 会按名称识别包装脚本(google-chromegoogle-chrome-stablegoogle-chrome-betagoogle-chrome-devgoogle-chrome-unstable),并在 /opt/google/chrome/chrome 存在时把它替换为真正的二进制。出于同样的原因,已知安装位置列表中真正的二进制也排在包装脚本之前。

shell 别名不是路径

Extension.js 使用 child_process.spawn 启动浏览器,它永远不会读取你的 shell 配置。像 google-chrome=... 这样的 shell 别名对启动器来说并不存在。请传入真实的文件路径,或者一个磁盘上确实可执行的包装脚本。

什么都找不到时

如果两侧都没有浏览器,CLI 会带上针对 WSL 的指引退出:在 WSL 内安装一个 Linux 浏览器,或者把 --chromium-binary 指向 Windows 的 .exe。Firefox 通过它自己的顺序以相同方式解析(/usr/bin/firefox/snap/bin/firefox/opt/firefox/firefox,然后是 /mnt/c/Program Files/Mozilla Firefox/firefox.exe)。

下一步