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 # 配置文件(禁止修改)
安装依赖
命令
pnpm i
新增依赖约束
如果需要新增依赖,需在 client 和 server 各自的目录添加(原因:隔离前后端的依赖),禁止在根目录直接安装依赖
新增依赖标准流程
- 编辑
client/package.json或server/package.json - 在根目录执行
pnpm i
Expo 开发规范
路径别名
Expo 配置了 @/ 路径别名指向 client/ 目录:
// 正确
import { Screen } from '@/components/Screen';
// 避免相对路径
import { Screen } from '../../../components/Screen';
本地开发
运行 coze dev 可以同时启动前端和后端服务,如果端口已占用,该命令会先杀掉占用端口的进程再启动,也可以用来重启前端和后端服务
coze dev