4.5 KiB
4.5 KiB
AGENTS.md
This file provides guidance to Codex (Codex.ai/code) when working with code in this repository.
项目概述
这是一个基于 WXT 框架的浏览器扩展项目,提供测试工具功能,包括时间戳转换等。
核心命令
开发相关
npm run dev- 启动 Chrome 浏览器的开发模式npm run dev:firefox- 启动 Firefox 浏览器的开发模式npm run build- 构建 Chrome 浏览器的生产版本npm run build:firefox- 构建 Firefox 浏览器的生产版本npm run zip- 打包 Chrome 扩展npm run zip:firefox- 打包 Firefox 扩展npm run compile- TypeScript 类型检查(不生成文件)npm run lint- 运行 ESLint 检查
测试相关
npm run test- 运行所有测试(单次执行)npm run test:watch- 运行测试并监听文件变化npm run test:coverage- 运行测试并生成覆盖率报告
运行单个测试文件:
npx vitest run components/__tests__/CopyButton.test.tsx
测试技术栈:
- Vitest - 测试框架
- @testing-library/react - React 组件测试
- @testing-library/user-event v13 - 用户交互模拟(注意:v13 不支持 setup(),使用 fireEvent)
- jsdom - 浏览器环境模拟
依赖与准备
npm install- 安装依赖postinstall会自动运行wxt prepare准备开发环境prepare钩子会初始化 Husky Git 钩子
项目架构
技术栈
- 框架: WXT (Web Extension Toolkit) - 浏览器扩展开发框架
- 前端: React 19 + TypeScript
- UI 库: Material UI (MUI)
- 状态管理: React Hooks
- 路由: React Router DOM
目录结构
├── components/ # 可复用 UI 组件
│ ├── CopyButton.tsx # 复制按钮组件
│ ├── DatetimeToTimestamp.tsx # 日期转时间戳组件
│ ├── Navbar.tsx # 导航栏组件
│ ├── RoutePersistence.tsx # 路由持久化组件
│ ├── TimestampExecution.tsx # 时间戳执行组件
│ └── TimestampToDatetime.tsx # 时间戳转日期组件
├── entrypoints/ # 浏览器扩展入口点
│ ├── background.ts # 后台脚本(主进程)
│ ├── content.ts # 内容脚本(注入到页面)
│ └── popup/ # 扩展弹窗界面
│ ├── App.tsx # 弹窗主应用
│ ├── main.tsx # 弹窗入口
│ └── pages/ # 弹窗页面
│ ├── TestPage.tsx # 测试页面
│ └── TimestampPage.tsx # 时间戳工具页面
├── utils/ # 工具函数
│ ├── chromeStorage.ts # Chrome 存储工具
│ ├── dayjs.ts # 日期处理工具
│ └── messages.tsx # 消息通信工具
├── types/ # 类型定义
│ └── storage.d.ts # 存储相关类型
核心功能实现
1. 时间戳转换工具
- 位置:
components/目录下的时间戳相关组件 - 依赖: dayjs 库进行日期处理
- 功能: 支持日期与时间戳的双向转换,支持多种格式
2. 通信系统
- 位置:
utils/messages.tsx - 机制: 使用
@webext-core/messaging库实现 - 通信通道: 后台脚本 ↔ 内容脚本 ↔ 弹窗
3. 数据存储
- Chrome Storage API:
utils/chromeStorage.ts(用于配置等小数据)
关键配置文件
wxt.config.ts
- 配置 WXT 框架参数
- 启用 React 模块
- 配置浏览器扩展权限
- Vite 构建配置(使用 Terser 压缩,强制 ASCII 编码)
manifest 权限
permissions: [
'storage', // 存储权限
'unlimitedStorage', // 无限制存储
'clipboardWrite', // 剪贴板写入
'activeTab', // 当前标签页
'scripting', // 脚本注入
'tabs', // 标签页管理
'debugger', // 调试器
],
host_permissions: ['<all_urls>'] // 访问所有网站
开发注意事项
扩展入口点
- 后台脚本:
entrypoints/background.ts- 处理扩展生命周期和后台任务 - 内容脚本:
entrypoints/content.ts- 注入到网页中,处理 DOM 交互 - 弹窗:
entrypoints/popup/main.tsx- 用户点击扩展图标时显示
浏览器兼容性
- 支持 Chrome 和 Firefox 浏览器
- 使用 WXT 框架抽象浏览器差异
代码质量
- 使用 ESLint 进行代码检查
- Husky 用于 Git 钩子管理
- Lint-staged 确保暂存文件符合规范