@coze-arch/cli 0.0.3-beta.1 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Expo App + Express.js
|
|
2
|
+
|
|
3
|
+
## 目录结构规范(严格遵循)
|
|
4
|
+
|
|
5
|
+
当前仓库是一个 monorepo(基于 pnpm 的 workspace)
|
|
6
|
+
|
|
7
|
+
- Expo 代码在 client 目录,Express.js 代码在 server 目录
|
|
8
|
+
- 本模板默认无 Tab Bar,可按需改造
|
|
9
|
+
|
|
10
|
+
目录结构说明
|
|
11
|
+
|
|
12
|
+
├── server/ # 服务端代码根目录 (Express.js)
|
|
13
|
+
| ├── src/
|
|
14
|
+
│ │ └── index.ts # Express 入口文件
|
|
15
|
+
| └── package.json # 服务端 package.json
|
|
16
|
+
├── client/ # React Native 前端代码
|
|
17
|
+
│ ├── app/ # Expo Router 路由目录(仅路由配置)
|
|
18
|
+
│ │ ├── _layout.tsx # 根布局文件(必需,务必阅读)
|
|
19
|
+
│ │ ├── home.tsx # 首页
|
|
20
|
+
│ │ └── index.tsx # re-export home.tsx
|
|
21
|
+
│ ├── screens/ # 页面实现目录(与 app/ 路由对应)
|
|
22
|
+
│ │ └── demo/ # demo 示例页面
|
|
23
|
+
│ │ ├── index.tsx # 页面组件实现
|
|
24
|
+
│ │ └── styles.ts # 页面样式
|
|
25
|
+
│ ├── components/ # 可复用组件
|
|
26
|
+
│ │ └── Screen.tsx # 页面容器组件(必用)
|
|
27
|
+
│ ├── hooks/ # 自定义 Hooks
|
|
28
|
+
│ ├── contexts/ # React Context 代码
|
|
29
|
+
│ ├── constants/ # 常量定义(如主题配置)
|
|
30
|
+
│ ├── utils/ # 工具函数
|
|
31
|
+
│ ├── assets/ # 静态资源
|
|
32
|
+
| └── package.json # Expo 应用 package.json
|
|
33
|
+
├── package.json
|
|
34
|
+
├── .cozeproj # 预置脚手架脚本(禁止修改)
|
|
35
|
+
└── .coze # 配置文件(禁止修改)
|
|
36
|
+
|
|
37
|
+
## 依赖管理与模块导入规范
|
|
38
|
+
|
|
39
|
+
### 依赖安装
|
|
40
|
+
**禁止**使用 `npm` 或 `yarn`,按目录区分安装命令:
|
|
41
|
+
|
|
42
|
+
| 目录 | 安装命令 | 说明 |
|
|
43
|
+
|------|----------|------|
|
|
44
|
+
| `client/` | `npx expo install <package>` | Expo 会自动选择与 SDK 兼容的版本 |
|
|
45
|
+
| `server/` | `pnpm add <package>` | 使用 pnpm 管理后端依赖 |
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# client 目录(Expo 项目)
|
|
49
|
+
cd client && npx expo install expo-camera expo-image-picker
|
|
50
|
+
|
|
51
|
+
# server 目录(Express 项目)
|
|
52
|
+
cd server && pnpm add axios cors
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**网络问题处理**:`npx expo install` 可能因网络原因失败,失败时重试 2 次,仍失败则改用 `pnpm add` 安装
|
|
56
|
+
|
|
57
|
+
## Expo 开发规范
|
|
58
|
+
|
|
59
|
+
### 路径别名
|
|
60
|
+
|
|
61
|
+
Expo 配置了 `@/` 路径别名指向 `client/` 目录:
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
// 正确
|
|
65
|
+
import { Screen } from '@/components/Screen';
|
|
66
|
+
|
|
67
|
+
// 避免相对路径
|
|
68
|
+
import { Screen } from '../../../components/Screen';
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 本地开发
|
|
72
|
+
|
|
73
|
+
运行 coze dev 可以同时启动前端和后端服务,如果端口已占用,该命令会先杀掉占用端口的进程再启动,也可以用来重启前端和后端服务
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
coze dev
|
|
77
|
+
```
|
|
@@ -34,22 +34,25 @@
|
|
|
34
34
|
├── .cozeproj # 预置脚手架脚本(禁止修改)
|
|
35
35
|
└── .coze # 配置文件(禁止修改)
|
|
36
36
|
|
|
37
|
-
##
|
|
37
|
+
## 依赖管理与模块导入规范
|
|
38
38
|
|
|
39
|
-
###
|
|
39
|
+
### 依赖安装
|
|
40
|
+
**禁止**使用 `npm` 或 `yarn`,按目录区分安装命令:
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
### 新增依赖约束
|
|
42
|
+
| 目录 | 安装命令 | 说明 |
|
|
43
|
+
|------|----------|------|
|
|
44
|
+
| `client/` | `npx expo install <package>` | Expo 会自动选择与 SDK 兼容的版本 |
|
|
45
|
+
| `server/` | `pnpm add <package>` | 使用 pnpm 管理后端依赖 |
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
```bash
|
|
48
|
+
# client 目录(Expo 项目)
|
|
49
|
+
cd client && npx expo install expo-camera expo-image-picker
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
# server 目录(Express 项目)
|
|
52
|
+
cd server && pnpm add axios cors
|
|
53
|
+
```
|
|
50
54
|
|
|
51
|
-
|
|
52
|
-
- 在根目录执行 `pnpm i`
|
|
55
|
+
**网络问题处理**:`npx expo install` 可能因网络原因失败,失败时重试 2 次,仍失败则改用 `pnpm add` 安装
|
|
53
56
|
|
|
54
57
|
## Expo 开发规范
|
|
55
58
|
|
|
@@ -33,9 +33,15 @@ export const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) =>
|
|
|
33
33
|
token: null,
|
|
34
34
|
isAuthenticated: false,
|
|
35
35
|
isLoading: false,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
|
|
37
|
+
// 登录逻辑,根据项目实际情况实现
|
|
38
|
+
login: async (token: string) => {}, // eslint-disable-line @typescript-eslint/no-empty-function
|
|
39
|
+
|
|
40
|
+
// 登出逻辑,根据项目实际情况实现
|
|
41
|
+
logout: async () => {}, // eslint-disable-line @typescript-eslint/no-empty-function
|
|
42
|
+
|
|
43
|
+
// 更新用户信息,根据项目实际情况实现
|
|
44
|
+
updateUser: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function
|
|
39
45
|
};
|
|
40
46
|
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
|
|
41
47
|
};
|
|
@@ -100,6 +100,9 @@ export default [
|
|
|
100
100
|
},
|
|
101
101
|
],
|
|
102
102
|
'reactnative/wrap-horizontal-scrollview-inside-view': ['error'],
|
|
103
|
+
'no-empty-function': 'off',
|
|
104
|
+
'@typescript-eslint/no-empty-function': 'error',
|
|
105
|
+
'no-warning-comments': ['error', { terms: ['TODO'], location: 'start' }],
|
|
103
106
|
},
|
|
104
107
|
},
|
|
105
108
|
|