首页 / WXT 浏览器扩展框架教程 / 横向对比:WXT 与其他方案

WXT 浏览器扩展框架教程

横向对比:WXT 与其他方案

本教程共 45 篇 · 第 43 篇 · 更新于 2026-08-13 · 约 4 分钟阅读

WXTPlasmoCRXJS横向对比选型技术方案

本节目标:把 WXT 放进坐标系里看。§02 讲的是 WXT 的定位与设计理念,本节基于官方对比表做全量横评,再给不同场景的选型建议。对比只说事实,不评高下。

对手是谁

写浏览器扩展,常见四条路线:原生开发(手写 manifest + 自己搭构建)、Plasmo(框架)、CRXJS(Vite 插件)、WXT(框架)。官方文档用一张对比表横评了 WXT、Plasmo、CRXJS 三家,本节把它翻译成中文并逐项解读。

基础能力对比

图例:✅ 完整支持,🟡 部分支持,❌ 不支持。

能力WXTPlasmoCRXJS
持续维护🟡 近维护模式🟡 存疑
支持全部浏览器🟡 v2 稳定版未发布
支持 MV2🟡 二选一
支持 MV3🟡 二选一
生成商店 zip
生成 Firefox 源码包
一流的 TypeScript 支持
按文件发现入口点
入口点内联配置❌ 全在 manifest 里
自动导入
可复用模块系统
支持全部前端框架🟡 仅 React/Vue/Svelte
框架专属入口(如 Popup.tsx)🟡 仅 html/ts/tsx✅ 含 vue/svelte
自动化商店发布
未注册 HTML 页
未列出脚本
ESM 内容脚本❌ 开发中

解读三点。其一,CRXJS 本质是 Vite 插件,入口点配置全在 manifest 里,这决定了它「单清单、少约定」的形态;ESM 内容脚本是它的独门功夫,但代价是不支持 MV2/MV3 同时输出。其二,WXT 与 Plasmo 都是框架,按文件发现入口点、内联配置是共同基因,差别在生态层:自动导入、模块系统、Firefox 源码包、未列出脚本这些是 WXT 独有。其三,Plasmo 目前维护节奏放缓,选型时要考虑长期风险。

开发体验对比

能力WXTPlasmoCRXJS
支持 .env 文件
自动开浏览器并装好扩展
UI 热更新🟡 仅 React
HTML 改动自动刷新🟡 整扩展重载
内容脚本改动自动刷新🟡 整扩展重载
后台改动自动刷新🟡 整扩展重载🟡 整扩展重载🟡 整扩展重载
遵守内容脚本 run_at❌ 异步加载

「自动开浏览器并装好扩展」是 WXT 开发体验里最省事的一环:wxt dev 起来,浏览器自己开好、扩展自己装上,改完代码热更新。Plasmo 与 CRXJS 需要手动刷新或用别的工具。整扩展重载不是缺点,是浏览器扩展的普遍约束——后台脚本重载必然影响整个扩展,三家都一样。

内置封装对比

能力WXTPlasmoCRXJS
Storage 封装
Messaging 封装❌ 官方推荐 @webext-core
内容脚本 UI 封装
I18n 封装

这里有个容易误读的点:官方表里 WXT 的 Messaging 是 ❌。不是说 WXT 不能用消息通信,而是它没有内置消息封装,推荐用社区包 @webext-core/messaging 补上类型安全(§17 整章都在讲这个组合)。CRXJS 的 ❌ 同理——「没有内置封装」不等于「做不到」,用 chrome/browser 原生 API 或第三方包即可。

Note

表格里的 ✅/🟡/❌ 是官方在 0.21.4 时代的评估,会随时间变化。选型前建议去各家官网确认最新状态。

按场景选型

  • 从零开始、想要省心:WXT。自动开浏览器、热更新、类型安全、一条命令上架,这些开箱即得。
  • 已是 Vite 项目、只想加扩展:CRXJS 或 WXT 都行。CRXJS 改动最小,但注意它 MV2/MV3 二选一;WXT 的迁移路径见 §44。
  • 重度依赖 ESM 内容脚本:CRXJS 目前是唯一选择,WXT 的 ESM 内容脚本还在开发中(跟踪 wxt-dev/wxt#357)。
  • 要用 Vue/Svelte 写入口文件:Plasmo 的框架专属入口支持最全(.vue/.svelte 直接当入口),WXT 需要一层 html 壳。
  • 已有扩展要搬家:先看 §44 的迁移路径,再决定。

没有银弹。框架解决「约定与自动化」,插件解决「融入现有工程」,原生解决「零依赖」。清楚自己卡在哪一环,选型就完成了一半。

小结

  • 三张表横向对比 WXT / Plasmo / CRXJS 的基础能力、开发体验与内置封装。
  • 没有银弹:框架解决「约定与自动化」,插件解决「融入现有工程」,原生解决「零依赖」。
  • 各项目维护状态会变,选型前查一下最新情况。