# Expo App + Express.js ## 目录结构规范(严格遵循) 当前仓库是一个 monorepo(基于 pnpm 的 workspace) - Expo 代码在 client 目录,Express.js 代码在 server 目录 - 本模板默认无 Tab Bar,可按需改造 目录结构说明 ├── server/ # 服务端代码根目录 (Express.js) | ├── src/ │ │ └── index.ts # Express 入口文件 | └── package.json # 服务端 package.json ├── client/ # React Native 前端代码 │ ├── app/ # Expo Router 路由目录(仅路由配置) │ │ ├── _layout.tsx # 根布局文件(必需,务必阅读) │ │ ├── home.tsx # 首页 │ │ └── index.tsx # re-export home.tsx │ ├── screens/ # 页面实现目录(与 app/ 路由对应) │ │ └── demo/ # demo 示例页面 │ │ ├── index.tsx # 页面组件实现 │ │ └── styles.ts # 页面样式 │ ├── components/ # 可复用组件 │ │ └── Screen.tsx # 页面容器组件(必用) │ ├── hooks/ # 自定义 Hooks │ ├── contexts/ # React Context 代码 │ ├── constants/ # 常量定义(如主题配置) │ ├── utils/ # 工具函数 │ ├── assets/ # 静态资源 | └── package.json # Expo 应用 package.json ├── package.json ├── .cozeproj # 预置脚手架脚本(禁止修改) └── .coze # 配置文件(禁止修改) ## 安装依赖 ### 命令 ```bash pnpm i ``` ### 新增依赖约束 如果需要新增依赖,需在 client 和 server 各自的目录添加(原因:隔离前后端的依赖),禁止在根目录直接安装依赖 ### 新增依赖标准流程 - 编辑 `client/package.json` 或 `server/package.json` - 在根目录执行 `pnpm i` ## Expo 开发规范 ### 路径别名 Expo 配置了 `@/` 路径别名指向 `client/` 目录: ```tsx // 正确 import { Screen } from '@/components/Screen'; // 避免相对路径 import { Screen } from '../../../components/Screen'; ``` ## 本地开发 运行 coze dev 可以同时启动前端和后端服务,如果端口已占用,该命令会先杀掉占用端口的进程再启动,也可以用来重启前端和后端服务 ```bash coze dev ```