主要观点:成功将浏览器扩展(ChatGPT Writer)从 Plasmo 迁移到 WXT 框架,解决了开发中的问题并实现更平滑发展。
关键信息:
- 起初用 Plasmo 开发,因其能处理代码捆绑等任务加快开发,但后来扩展功能增加,发展受限,如更改需 7 秒以上重建,代码更新不及时等,且 Parcel 捆绑器过时导致与 Markdown 等包不兼容,作者不再维护框架,希望渺茫。
- 决定用 Vite 写浏览器扩展特定配置,后接触 WXT 框架,因其能处理所有相关事宜节省时间,且基于 Vite 有优势,迁移后扩展构建大小从 700KB 减小到 400KB。
迁移过程: - 在 WXT 中组织入口点:需在项目根目录创建
entrypoints
目录,将内容脚本等文件放入其中。
- 在 WXT 中组织入口点:需在项目根目录创建
- 添加 post-install 命令:在
package.json
中添加postinstall
脚本"postinstall": "wxt prepare"
,自动生成.wxt
目录。
- 添加 post-install 命令:在
- 配置调整:避免 TypeScript 配置冲突,通过扩展
tsconfig
文件和调整编译器选项解决,同时管理路径别名。
- 配置调整:避免 TypeScript 配置冲突,通过扩展
- 环境变量问题:适应 Vite 处理环境变量的方式,前缀为
VITE_
并使用import.meta.env
访问。
- 环境变量问题:适应 Vite 处理环境变量的方式,前缀为
- 迁移清单配置到
wxt.config.ts
:在该文件中设置扩展的清单配置,从package.json
迁移过来。
- 迁移清单配置到
- 调整图标管理:手动创建不同分辨率的图标文件放入
public
目录,并在wxt.config.ts
中定义。
- 调整图标管理:手动创建不同分辨率的图标文件放入
- 处理内联资产导入:去掉
data-base64
前缀,直接导入资产。
- 处理内联资产导入:去掉
- 解决开发中的端口冲突:可给 WXT 指定不同端口或先启动 Next.js 服务器。
- 处理开发中的双重渲染:注意
React.StrictMode
导致的组件双渲染,优化副作用逻辑。
- 处理开发中的双重渲染:注意
- 管理 Shadow DOM 实现:可使用 WXT 内置方法或框架独立方式实现。
- 避免跨上下文代码共享:用消息传递 API 通信,使用共享目录组织代码,避免共享上下文特定代码。
结论:迁移解决了开发问题,希望分享经验能帮助他人更顺利迁移。同时招聘 IST 时区的 React 开发者。
- 避免跨上下文代码共享:用消息传递 API 通信,使用共享目录组织代码,避免共享上下文特定代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。