什么场景适合用 Preact
- 你想缩减 popup/sidebar/新标签页等界面的 UI 包体积。
- 你喜欢 React 风格的组件,但希望运行时更轻。
- 你在优化低端设备上扩展的启动时间和 UI 响应速度。
模板示例
new-preact

content-preact

在现有扩展中使用
按下面的步骤把 Preact 添加到现有扩展。安装
安装所需依赖:@types/preact。
你只需要添加 preact 这一个包。Extension.js 会从你的项目里解析 preact/compat、preact/test-utils 以及 JSX 运行时,并按找到的内容构建别名映射,所以不需要再额外安装其他包。
配置
Extension.js 期望 Preact 文件使用以下扩展名:- 未启用 TypeScript:
*.jsx - 启用 TypeScript:
*.tsx
开发期行为
当 Extension.js 检测到 Preact 时,它会配置:- 兼容别名(例如把
react指向preact/compat)。 - 适配 Preact 的 JSX 处理。
- 开发期的 live reload:文件变化时,受影响的界面会重新加载并重新挂载。
@rspack/plugin-preact-refresh 运行时与 Extension.js 内置的 Rspack 版本不兼容,
所以 Extension.js 选择禁用它,而不是让 dev 模式出问题。你的应用在每次编辑后
仍然会更新,只是组件状态不会在编辑之间保留。等上游插件修好后,fast refresh
会回归。
排查
- 编辑后组件状态被重置: 这是目前的预期行为,因为 Preact 用的是 live reload,而不是 fast refresh(见上文)。
- 未检测到 Preact 集成: 确认
preact出现在dependencies或devDependencies中。
用法示例
在新标签页扩展中
要在新标签页扩展中使用 Preact,请把入口作为<script> 引入 HTML 文件:
在 content_script 文件中
对于 content script,创建一个 HTML 元素并把 Preact 渲染进去:
下一步
- 进一步了解 TypeScript 支持。
- 了解 Extension.js 如何处理 Sass 模块。

