Files
miniapp-template-ts/AGENTS.md
T
熊熊熊子路 11c6fb21cd refactor: 将page-container重命名为root-page-layout
将page-container组件重命名为root-page-layout,并更新所有文档中的引用,以更好地反映其作为页面根布局的角色。已更新AGENTS.md、README.md中的引用,并相应重命名了组件使用指南。
2026-07-31 11:59:34 +08:00

6.4 KiB
Raw Blame History

CLAUDE.md

This file provides guidance to AI Coding Agent when working with code in this repository.

项目概况

微信小程序 TypeScript 模板 — 基于 TypeScript + SASS 的小程序开发脚手架,集成 TDesign 组件库、axios-miniprogram 网络请求、crypto-js AES 加密等。

常用命令

# 安装依赖(需要 pnpm)
pnpm install

# ESLint 检查
pnpm lint

# ESLint 自动修复
pnpm lint:fix

# Prettier 格式化
pnpm format

# Prettier 格式检查
pnpm format:check

微信开发者工具操作:

  • 修改 package.json 依赖后,需在微信开发者工具中执行「工具 → 构建 npm」
  • TypeScript 和 SASS 编译由微信开发者工具内置编译器完成(无独立构建命令)
  • 开发时在微信开发者工具中点击「编译」即可预览

技术栈

类别 技术
语言 TypeScript (ES2020 target, CommonJS module)
样式 SASS/SCSS(通过 project.config.json 的 useCompilerPlugins 启用)
UI 组件 TDesign Miniprogram v1.12+
HTTP axios-miniprogram v2.7+
加密 crypto-js v4.2+
包管理 pnpm
代码规范 ESLint 9 + TypeScript ESLint + Prettier

项目架构

miniprogram/
├── app.ts              # 入口:计算导航栏/安全区尺寸、初始化 platformInfo 到 globalData
├── app.json            # 页面注册、自定义 TabBar、navigationStyle: "custom"
├── app.scss            # 全局样式重置
├── api/                # API 接口层(每接口一个文件 + types.ts 定义 StandardResponse<T>)
├── components/         # 共享组件(目前仅有 root-page-layout)
├── custom-tab-bar/     # 自定义 TabBar(基于 TDesign t-tab-bar)
├── pages/              # 页面(index, login, date, one~four)
├── utils/
│   ├── request.ts      # axios-miniprogram 封装:Token 注入、loading 管理、401 跳转
│   ├── aes.ts          # AES-256-CBC 加密/解密 + URL Safe Base64 变体
│   ├── util.ts         # 日期格式化(formatTime / formatDateTime)
│   └── platform.ts     # 微信宿主平台信息检测(设备类别/操作系统/桌面or移动)
└── miniprogram_npm/    # 微信开发者工具构建的 npm 产物(已 gitignore,不直接编辑)
typings/                # 全局类型声明(IAppOption、PlatformInfoType 等)+ 微信 API 类型

核心架构决策

自定义导航栏

app.json 中 window.navigationStyle: "custom" 全局关闭了原生导航栏。所有需要导航栏的页面必须使用 root-page-layout 组件(封装 TDesign t-navbar),该组件自动根据页面栈深度决定是否显示返回按钮。

网络请求模式

所有 API 调用遵循统一模式:

  1. api/types.ts 定义 StandardResponse<T> 结构({ code, data, message })
  2. 每个 API 模块从 utils/request 导入 axios 实例,定义请求函数
  3. 请求拦截器自动注入 Authorization header(从 app.globalData.token 读取),白名单接口除外
  4. 响应拦截器在 code === 200 时自动解包返回 result.data,401 时 reLaunch 到登录页
  5. 并发请求的 loading 动画通过计数器管理(netWorkNum),避免闪烁

GlobalData 结构

app.globalData 在 onLaunch 中初始化以下数据:

  • UI 布局数据:navBarHeight、navBarContentHeight、statusBarHeight、menuRight、menuTop、menuHeight、safeAreaBottom、safeAreaInsetBottom — 通过 wx.getMenuButtonBoundingClientRect() 和 wx.getWindowInfo() 计算
  • 平台信息:platformInfo — 通过 utils/platform.ts 的 getPlatformInfo() 获取,包含 hardware、software、isMobile、isDesktop、isDevtools
  • 认证:token(登录成功后由业务代码设置)

类型定义位于 typings/index.d.ts 的 IAppOption 接口。

自定义 TabBar

  • app.json 中 tabBar.custom: true 启用自定义 TabBar
  • 组件位于 miniprogram/custom-tab-bar/,基于 TDesign t-tab-bar
  • TabBar 页面必须在 onShow 中调用 this.getTabBar().init() 同步激活状态
  • app.json 的 tabBar.list 和 custom-tab-bar/index.ts 的 data.list 需保持配置一致

SASS 全局注入

project.config.json 中通过 sassSetting 配置了 sassCommonUseFilePath: "global.sass" 和 scssCommonUseFilePath: "global.scss",微信开发者工具会自动将这些全局文件注入每个 SCSS/SASS 文件。当前 miniprogram 根目录下尚无 global.scss / global.sass 文件,需手动创建后使用。

无独立构建系统

本项目不依赖 Webpack/Vite 等构建工具。TypeScript 和 SASS 编译由微信开发者工具的 SWC 编译器内置完成(project.config.json 中 swc: true)。ESLint/Prettier 仅用于代码质量检查,不参与编译流程。

关键约定

  • npm 镜像:.npmrc 配置了 npmmirror.com 镜像和 node-sass 二进制镜像
  • 代码风格:分号关闭、单引号、100 字符宽度、2 空格缩进、LF 换行
  • ESLint:no-console 为 warn 级别(仅允许 console.warn 和 console.error),@typescript-eslint/no-explicit-any 为 warn
  • 路径别名:无路径别名 — 所有 import 使用相对路径
  • 微信基础库版本:libVersion: "3.14.1"(project.config.json),3.17.0(project.private.config.json)
  • npm 构建模式:手动模式(packNpmManually: true),npm 包输出到 miniprogram/ 目录
  • Git 忽略:miniprogram/miniprogram_npm/、project.private.config.json、*.js.map 等不纳入版本控制

类型系统

全局类型通过 typings/index.d.ts 的三斜线指令引入,定义了:

  • IAppOption — App 实例类型(含 globalData 完整结构)
  • PlatformInfoType / HardwarePlatformInfoType / SoftwarePlatformInfoType — 平台信息层级类型
  • ClientPlatformType / OperatingSystemType / HardwareDeviceClassType — 联合类型
  • 微信小程序 API 类型位于 typings/types/wx/ 目录