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