Skip to content

入口点加载器

为了在构建时生成 manifest 和其他文件,WXT 必须导入每个入口点以获取其选项,例如 content script 的 matches。对于 HTML 文件,这很简单。但对于 JS/TS 入口点,过程则更加复杂。

在加载 JS/TS 入口点时,它们会被导入到 NodeJS 环境中,而非它们通常运行的 browser 环境。这可能会导致在 NodeJS 环境中运行仅限浏览器的代码时常见的问题,例如缺少全局变量。

WXT 会执行多个预处理步骤来尽量避免此过程中的错误:

  1. 使用 linkedom 提供一小部分浏览器全局变量(windowdocument 等)。
  2. 使用 @webext-core/fake-browser 创建扩展所需的 chromebrowser 全局变量的模拟版本。
  3. 预处理 JS/TS 代码,剥离 main 函数,然后对文件中未使用的代码进行 tree-shaking。

然而,这个过程并不完美。它无法设置浏览器中的所有全局变量,且 API 的行为可能有所不同。因此,你应该避免在入口点的 main 函数之外使用浏览器或扩展 API! 详情请参阅入口点限制

TIP

如果你在导入入口点时遇到错误,请运行 wxt prepare --debug 以查看此过程的更多详细信息。在调试模式下,WXT 会打印出预处理后的代码,帮助你定位问题。

一旦环境被 polyfill 且代码完成预处理,接下来就由入口点加载器来导入你的代码,从默认导出中提取选项。