manifest.json 出发,为 Chrome、Edge、Firefox 和 Safari 构建并运行浏览器扩展。要创建一个扩展,在终端里运行这些命令:
几个框架
有两点结构性的差异比任何特性表格都更重要:
- manifest 在哪里。 Extension.js 读取你的
manifest.json,并编译它声明的所有内容。WXT 与 Plasmo 通过文件约定和配置来生成 manifest。CRXJS 也读取 manifest,但通过 Vite 的插件 API 解析,所以每个 Vite 主版本都需要 CRXJS 做兼容工作。Vite 8 就需要过(参见 Vite 8 fileName 错误),当前的 CRXJS 支持 Vite 3 到 8。 - 谁拥有打包器。 一个封装了通用打包器的框架,会继承那个打包器的破坏性变更。Extension.js 把打包器当作内部细节:你永远不需要配置它,升级是框架的事,而不是你的事。
详细对比与迁移
- Extension.js vs WXT:最接近的对比,逐项展开。
- Extension.js vs Plasmo:manifest 模型、开发循环、打包,以及带日期的维护状态。
- Extension.js vs CRXJS:自带打包器的框架,对比运行在你自己的 Vite 配置里的插件。
- 从 CRXJS 迁移:分步指南,典型项目大约十分钟。
- 修复:Content script fileName is undefined:CRXJS + Vite 8 的构建错误,附变通方案。
- 从 Plasmo 迁移:约定到 manifest 的映射、环境变量与 CSUI。
- 迁移 webpack 或 Vite 扩展:把入口交给 manifest.json、迁移 loader 与插件,以及真实迁移中最耗时的坑。
不必承诺,先试一试
用一条命令运行任意扩展模板,或运行 GitHub 上任意扩展仓库:chrome.* 调用与样式都可以直接沿用。迁移指南会覆盖需要调整的接线部分。
