Taro 研发 Skill(面向当前仓库约定)
目标:在不引入新框架、不改变既有架构的前提下,把需求落到本仓库可运行、可维护的 Taro 代码上;输出包含“改哪些文件 + 为什么 + 如何验证”。
适用前提(自动识别)
- 框架:Taro 3.6.x(本仓库依赖为 3.6.28)+ React 18 + TypeScript + Webpack5
- 目录约定:
src/pages页面、src/components组件、src/apis接口、src/utils通用能力 - 路径别名:
@/*指向src/* - 样式:Sass + CSS Modules(常见为
index.module.scss) - 环境变量:以
TARO_APP_开头(例如TARO_APP_BASE_URL),并通过TARO_APP_ENV选择构建配置
工作方式(必须遵循)
- 先判断目标端与场景
- 目标端:
process.env.TARO_ENV(如weapp/h5/alipay等) - 构建环境:
process.env.TARO_APP_ENV(本仓库约定local/test/ 生产)
- 目标端:
- 复用已有模式再扩展
- 新增页面/组件/接口时,先定位仓库中“最相似的实现”作为模板
- 最小化改动面
- 优先在既有模块中扩展;确需新增文件时,保持与同目录文件一致的命名与导出风格
- 不额外增加注释
- 除非用户明确要求,或修改区域本身已存在固定注释规范需要保持一致
项目速查(落地时优先参考)
- Taro 构建配置入口:
config/index.ts(基于TARO_APP_ENV合并 dev/test/prod) - App 入口:
src/app.tsx、路由/分包:src/app.config.ts - 页面三件套:
src/pages/**/index.tsx+index.config.ts+index.module.scss - 请求封装:
src/utils/request(支持needAuth/showLoading/showError等扩展配置) - 接口组织:
src/apis/*.ts(函数式导出,入参 interface + 调用 request)
交付物模板(每次都按这个结构输出)
1) 需求复述(1-3 句)
- 说明要改什么、影响哪些端(weapp/h5 等)、是否涉及分包/路由/权限
2) 改动点清单(文件级)
用列表写清楚每个文件的改动目的,例如:
src/pages/xxx/index.tsx:新增页面 UI 与交互src/pages/xxx/index.config.ts:配置标题/导航条/分享等src/app.config.ts:加入 pages 或 subPackagessrc/apis/yyy.ts:新增接口方法
3) 关键实现(代码)
- 只给与本需求相关的代码片段/文件 patch
- 使用
@/别名导入 - 样式优先使用
index.module.scss并通过styles[...]引用
4) 验证方式(可复制命令 + 预期现象)
- 优先引用
package.json现有脚本(如dev:weapp/dev:h5/build:*) - 写出“看到什么算成功”
常见任务的落地指引
A. 新增页面(主包 or 分包)
- 判断落点:
- 主包页面:加到
src/app.config.ts的pages - 分包页面:加到
src/app.config.ts的subPackages[].pages,并确保root正确
- 主包页面:加到
- 新建页面目录:
src/pages/<page-name>/index.tsxsrc/pages/<page-name>/index.config.tssrc/pages/<page-name>/index.module.scss
index.config.ts约定:- 定义
const pageConfig: Taro.PageConfig = { ... } export default definePageConfig(pageConfig);
- 定义
- 生命周期选择:
- 页面展示刷新用
useDidShow - 首次启动/初始化用
useLaunch(通常在app.tsx)
- 页面展示刷新用
B. 新增/修改接口调用(走统一 request)
- 文件归类:
- 优先放在已有同业务域文件(如
src/apis/user.ts、src/apis/order.ts)
- 优先放在已有同业务域文件(如
- 书写模式:
- 定义入参
interface(可选入参params?: X) return request({ url, method, data: params })- 若不需要登录态:
request( ..., { needAuth: false } ) - 若要 toast:
{ showError: true };需要 loading:{ showLoading: true, loadingText?: string }
- 定义入参
- 环境相关:
- 基础域名走
process.env.TARO_APP_BASE_URL(request 内已处理)
- 基础域名走
C. 新增组件(复用 CSS Modules + 现有组件组织)
- 组件目录:
src/components/<ComponentName>/ - 文件命名:
index.tsx+index.module.scss或与同目录保持一致 - 导出风格:默认导出组件或命名导出,保持与同目录一致
- 样式:尽量避免全局污染;需要复用变量可依赖 Sass resources(项目已全局注入)
D. H5/小程序差异处理
优先策略:
- 优先用已有工具函数封装差异(例如平台判断、导航、桥接能力)
- 分支写法:以
process.env.TARO_ENV === 'h5'或项目已有isMini()等能力判断 - 禁止直接访问小程序特有 API 于 H5 分支外
产出要求(用于自检)
- 新增页面已注册到
app.config.ts(主包或分包) - 代码可通过
npm run lint(避免未使用变量、类型错误) - 不引入新依赖(除非用户明确要求且仓库已有先例)
- 修改点最小且与现有风格一致(导入路径、样式组织、函数导出方式)