迁移到 WXT
概述
首先生成一个新的原始项目,然后逐个文件地合并到你的项目中。
cd path/to/your/project
pnpm dlx wxt@latest init example-wxt --template vanillaTIP
建议在开始之前先阅读项目结构。 你可以在 wxt.config.ts 中自定义目录名称以匹配你的项目需求。
一般来说,你需要:
安装 wxt
在项目的 tsconfig.json 中继承 .wxt/tsconfig.json
更新/创建 package.json 脚本以使用 wxt(不要忘记 postinstall)
将入口文件移动到 entrypoints/ 目录
将资源文件移动到 assets/ 或 public/ 目录
将 manifest.json 内容移动到 wxt.config.ts 中
将自定义导入语法转换为与 Vite 兼容的方式
为 JS 入口文件添加默认导出(defineBackground、defineContentScript 或 defineUnlistedScript)
使用 browser 全局变量替代 chrome
⚠️ 对比最终的 manifest.json 文件,确保权限和主机权限没有变化
WARNING
如果你的扩展已经在 Chrome Web Store 上线,请使用 Google 的更新测试工具来确保没有请求新的权限。
每个项目都不一样,因此没有一种万能的迁移方案。只需确保 wxt dev 能正常运行、wxt build 能生成可用的扩展,并且 manifest.json 中的权限列表没有变化。如果一切正常,你的扩展就迁移完成了!
常用工具/框架
以下是针对其他常用框架/构建工具的具体迁移步骤。
Plasmo
- 安装
wxt - 将入口文件移动到
entrypoints/目录 - 将公共
assets/*移动到public/目录 - 如果使用了 CSUI,请迁移到 WXT 的
createContentScriptUi - 将 Plasmo 的自定义导入解析转换为 Vite 的方式
- 如果通过 URL 导入远程代码,请添加
url:前缀以兼容 WXT - 将你的 Plasmo 标签(
--tag)替换为 WXT 构建模式(--mode) - ⚠️ 对比旧的生产环境 manifest 和
.output/*/manifest.json。它们应该与之前的内容相同。如果不同,请调整你的入口文件和配置直到一致。
CRXJS
如果你使用了 CRXJS 的 Vite 插件,迁移过程非常简单!CRXJS 和 WXT 的主要区别在于工具如何决定构建哪些入口文件。CRXJS 查看你的 manifest(以及 Vite 配置中的"未列出"条目),而 WXT 查看 entrypoints 目录中的文件。
迁移步骤:
- 将所有入口文件移动到
entrypoints目录,并重构为 WXT 的风格(TS 文件需要有默认导出)。 - 将入口文件特定选项从 manifest 中移出,放入入口文件本身(如 content script 的
matches或run_at)。 - 将其他
manifest.json选项移入wxt.config.ts文件,如权限等。 - 为简化操作,你可能需要先禁用自动导入(除非你已经通过
unimport或unplugin-auto-imports在使用它们)。如果你喜欢这个功能,可以在完成迁移后再启用。 - 更新你的
package.json,包含所有 WXT 建议的脚本(见步骤 4) - 特别注意,确保在
package.json中添加"postinstall": "wxt prepare"脚本。 - 删除你的
vite.config.ts文件。将所有插件移到wxt.config.ts文件中。如果你使用前端框架,请安装相应的 WXT 模块。 - 更新你的 TypeScript 项目。继承 WXT 生成的配置,并在
wxt.config.ts文件中添加路径别名。 - ⚠️ 对比旧的生产环境 manifest 和
.output/*/manifest.json。它们应该与之前的内容相同。如果不同,请调整你的入口文件和配置直到一致。
这里有一个迁移示例:GitHub Better Line Counts - CRXJS → WXT
vite-plugin-web-extension
由于你已经在使用 Vite,迁移过程非常简单。
- 安装
wxt - 移动并重构你的入口文件为 WXT 的风格(带有默认导出)
- 更新
package.json脚本以使用wxt - 添加
"postinstall": "wxt prepare"脚本 - 将
manifest.json移入wxt.config.ts - 将
vite.config.ts中的自定义设置移入wxt.config.ts - ⚠️ 对比旧的生产环境 manifest 和
.output/*/manifest.json。它们应该与之前的内容相同。如果不同,请调整你的入口文件和配置直到一致。