--- name: commit-review description: 微信小程序原生开发项目代码提交评审技能,检查架构约束、最佳实践和常见问题 --- # 微信小程序原生开发代码提交评审 这个技能用于在代码提交前进行全面的架构和代码质量评审,确保符合项目的关键约束和最佳实践。 ## 何时使用 在以下场景使用此技能: - 准备提交代码前(git commit 之前) - 代码审查时 - 用户明确要求评审代码时 - 关键词:review, 评审, 检查, commit, 提交 ## 评审检查清单 ### 🔴 关键架构约束(必须遵守) #### 1. Runtime 模块外部化 **最关键的架构约束** - runtime 模块必须保持外部引用,绝不能被打包。 **检查项:** - [ ] 所有 `import ... from 'runtime'` 或 `import ... from 'runtime/...'` 的引用是否正确 - [ ] vite.config.ts 中是否正确配置了 runtime 外部化 - [ ] 没有尝试修改 runtime 的外部化配置 - [ ] 没有在 optimizeDeps.include 中包含 runtime #### 2. 依赖安装规则 **所有新依赖必须安装为 devDependencies** **检查项:** - [ ] package.json 中是否有新增的 dependencies(应该为空或只有必要的运行时依赖) - [ ] 所有新安装的包是否使用了 `pnpm i -D` 命令 **正确做法:** ```bash # ✅ 正确 pnpm i -D package-name # ❌ 错误 pnpm i package-name ``` #### 3. TypeScript 强制使用 **所有逻辑文件必须使用 TypeScript (.ts),禁止使用 .js** **检查项:** - [ ] 新增或修改的页面/组件是否使用 .ts 文件 - [ ] 基本类型检查,确保类型正确,特别注意组件props和函数参数类型不能使用any - [ ] 没有创建新的 .js 文件(除非是配置文件) - [ ] 类型定义是否完整 **文件结构:** ``` pages/page-name/ ├── page-name.ts ✅ 使用 TypeScript ├── page-name.json └── page-name.wxml components/comp-name/ ├── comp-name.ts ✅ 使用 TypeScript ├── comp-name.json └── comp-name.wxml ``` #### 4. Tailwind CSS 强制使用 **所有样式必须使用 Tailwind CSS,禁止创建 .wxss 文件** **检查项:** - [ ] 没有创建新的 .wxss 文件 - [ ] 所有样式都在 .wxml 中使用 Tailwind 类名 - [ ] 使用了正确的 rpx 单位(Tailwind 会自动转换 rem 为 rpx) **正确做法:** ```html 标题 ``` ### 🟡 组件开发规范 #### 5. Component 配置 **所有组件必须设置正确的 styleIsolation** **检查项:** - [ ] 组件的 .json 文件中是否包含 `"styleIsolation": "apply-shared"` - [ ] 组件是否正确声明为 `"component": true` **正确配置:** ```json { "component": true, "styleIsolation": "apply-shared", "usingComponents": {} } ``` ### 🟢 性能最佳实践 #### 6. setData 优化 **使用数据路径和批量更新** **检查项:** - [ ] 是否使用了数据路径更新:`this.setData({ 'list[0].text': 'new' })` - [ ] 是否合并了多个 setData 调用 - [ ] 没有在循环中调用 setData **优化示例:** ```typescript // ❌ 错误:多次调用 this.setData({ name: 'John' }) this.setData({ age: 25 }) // ✅ 正确:合并调用 this.setData({ name: 'John', age: 25 }) // ✅ 正确:使用数据路径 this.setData({ 'list[0].text': 'new' }) ``` #### 7. Component vs Page **优先使用 Component() 而非 Page()** **检查项:** - [ ] 新页面是否使用 Component() 构造器 - [ ] 只在必要时使用 Page() **推荐做法:** ```typescript // ✅ 推荐:使用 Component Component({ data: {}, methods: {} }) // ⚠️ 仅在必要时使用 Page Page({ data: {}, onLoad() {} }) ``` ### 🔵 常见问题检查 #### 8. iOS 日期解析 **iOS 不支持 'YYYY-MM-DD' 格式** **检查项:** - [ ] 日期字符串是否使用 `.replace(/-/g, '/')` 处理 **正确做法:** ```typescript // ❌ 错误:iOS 会解析失败 new Date('2024-01-01') // ✅ 正确:兼容 iOS new Date('2024-01-01'.replace(/-/g, '/')) ``` #### 10. 图标使用规范 **必须使用 iconfont,禁止使用图片文件** **检查项:** - [ ] 图标是否使用 `` 格式 - [ ] 没有为图标创建 .png/.jpg 等图片文件 **正确做法:** ```html ``` ### 📦 构建和发布 #### 11. 构建产物检查 **确保三个输出目录的正确性** **检查项:** - [ ] dist/ - 主构建输出(包含 miniprogram_npm) - [ ] dist_miniprogram/ - NPM 包分发(排除 pages、app.js、miniprogram_npm) - [ ] dist_plugin/ - 插件包(包含 plugin.json) #### 12. 插件发布准备 **发布前必须清理 dist 目录** **检查项:** - [ ] 是否更新了 project.config.json 中的 appid - [ ] 是否更新了 miniprogram/app.json 中的 provider - [ ] dist/app.json 是否替换为插件配置 - [ ] dist 目录是否只保留必要文件 ### 🔒 安全检查 #### 13. 安全漏洞 **检查常见安全问题** **检查项:** - [ ] 没有命令注入风险 - [ ] 没有 XSS 漏洞(用户输入是否正确转义) - [ ] 没有敏感信息泄露(API key、token 等) ### 📝 代码质量 #### 14. 代码简洁性 **避免过度工程** **检查项:** - [ ] 没有添加未被要求的功能 - [ ] 没有不必要的重构 - [ ] 没有为一次性操作创建工具函数 - [ ] 没有添加不必要的错误处理 - [ ] 没有添加未使用的类型定义或注释 #### 15. 向后兼容性 **避免兼容性黑客** **检查项:** - [ ] 没有重命名未使用的变量为 `_var` - [ ] 没有为删除的代码添加 `// removed` 注释 - [ ] 没有重新导出未使用的类型 - [ ] 未使用的代码已完全删除 ## 评审流程 1. **读取变更文件** ```bash git diff --cached --name-only git diff --cached ``` 2. **逐项检查清单** - 按照上述检查清单逐项验证 - 标记 🔴 关键问题(必须修复) - 标记 🟡 警告问题(建议修复) - 标记 🟢 优化建议(可选) 3. **生成评审报告** - 列出所有发现的问题 - 提供具体的修复建议 - 给出代码示例 4. **修复确认** - 如果有问题,要求修复后再次评审 - 如果通过,允许提交 ## 评审报告模板 ```markdown ## 代码评审报告 ### 📊 概览 - 变更文件数:X - 新增行数:+X - 删除行数:-X ### 🔴 关键问题(必须修复) 1. [问题描述] - 文件:path/to/file.ts:行号 - 原因:[说明] - 修复建议:[具体方案] ### 🟡 警告问题(建议修复) 1. [问题描述] - 文件:path/to/file.ts:行号 - 建议:[优化方案] ### 🟢 优化建议(可选) 1. [建议描述] ### ✅ 评审结论 - [ ] 通过,可以提交 - [ ] 需要修复后重新评审 ``` ## 使用示例 ```bash # 用户准备提交代码 git add . # 触发评审 "请评审我的代码" "review my changes" "检查代码是否符合规范" ``` ## 注意事项 1. **严格执行关键约束** - 🔴 标记的问题必须修复 2. **提供具体建议** - 不只指出问题,还要给出解决方案 3. **引用具体位置** - 使用 `file:line` 格式引用代码位置 4. **保持客观** - 基于规范评审,不做主观判断 5. **优先级排序** - 先解决关键问题,再处理优化建议