@coze-arch/cli 0.0.1-beta.5 → 0.0.1-beta.6
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.
- package/lib/__templates__/expo/.cozeproj/scripts/deploy_run.sh +2 -2
- package/lib/__templates__/expo/app.json +1 -1
- package/lib/__templates__/expo/client/components/Screen.tsx +19 -19
- package/lib/__templates__/expo/client/index.js +2 -1
- package/lib/__templates__/expo/client/scripts/install-missing-deps.js +36 -12
- package/lib/__templates__/expo/metro.config.js +15 -15
- package/lib/__templates__/expo/package.json +22 -12
- package/lib/__templates__/expo/pnpm-lock.yaml +335 -4
- package/lib/__templates__/nextjs/.babelrc +15 -0
- package/lib/__templates__/nextjs/README.md +341 -19
- package/lib/__templates__/nextjs/components.json +21 -0
- package/lib/__templates__/nextjs/package.json +48 -1
- package/lib/__templates__/nextjs/pnpm-lock.yaml +6399 -1356
- package/lib/__templates__/nextjs/scripts/dev.sh +2 -1
- package/lib/__templates__/nextjs/server.mjs +50 -0
- package/lib/__templates__/nextjs/src/app/globals.css +99 -8
- package/lib/__templates__/nextjs/src/app/layout.tsx +55 -2
- package/lib/__templates__/nextjs/src/app/robots.ts +11 -0
- package/lib/__templates__/nextjs/src/components/ui/accordion.tsx +66 -0
- package/lib/__templates__/nextjs/src/components/ui/alert-dialog.tsx +157 -0
- package/lib/__templates__/nextjs/src/components/ui/alert.tsx +66 -0
- package/lib/__templates__/nextjs/src/components/ui/aspect-ratio.tsx +11 -0
- package/lib/__templates__/nextjs/src/components/ui/avatar.tsx +53 -0
- package/lib/__templates__/nextjs/src/components/ui/badge.tsx +46 -0
- package/lib/__templates__/nextjs/src/components/ui/breadcrumb.tsx +109 -0
- package/lib/__templates__/nextjs/src/components/ui/button-group.tsx +83 -0
- package/lib/__templates__/nextjs/src/components/ui/button.tsx +62 -0
- package/lib/__templates__/nextjs/src/components/ui/calendar.tsx +220 -0
- package/lib/__templates__/nextjs/src/components/ui/card.tsx +92 -0
- package/lib/__templates__/nextjs/src/components/ui/carousel.tsx +241 -0
- package/lib/__templates__/nextjs/src/components/ui/chart.tsx +357 -0
- package/lib/__templates__/nextjs/src/components/ui/checkbox.tsx +32 -0
- package/lib/__templates__/nextjs/src/components/ui/collapsible.tsx +33 -0
- package/lib/__templates__/nextjs/src/components/ui/command.tsx +184 -0
- package/lib/__templates__/nextjs/src/components/ui/context-menu.tsx +252 -0
- package/lib/__templates__/nextjs/src/components/ui/dialog.tsx +143 -0
- package/lib/__templates__/nextjs/src/components/ui/drawer.tsx +135 -0
- package/lib/__templates__/nextjs/src/components/ui/dropdown-menu.tsx +257 -0
- package/lib/__templates__/nextjs/src/components/ui/empty.tsx +104 -0
- package/lib/__templates__/nextjs/src/components/ui/field.tsx +248 -0
- package/lib/__templates__/nextjs/src/components/ui/form.tsx +167 -0
- package/lib/__templates__/nextjs/src/components/ui/hover-card.tsx +44 -0
- package/lib/__templates__/nextjs/src/components/ui/input-group.tsx +170 -0
- package/lib/__templates__/nextjs/src/components/ui/input-otp.tsx +77 -0
- package/lib/__templates__/nextjs/src/components/ui/input.tsx +21 -0
- package/lib/__templates__/nextjs/src/components/ui/item.tsx +193 -0
- package/lib/__templates__/nextjs/src/components/ui/kbd.tsx +28 -0
- package/lib/__templates__/nextjs/src/components/ui/label.tsx +24 -0
- package/lib/__templates__/nextjs/src/components/ui/menubar.tsx +276 -0
- package/lib/__templates__/nextjs/src/components/ui/navigation-menu.tsx +168 -0
- package/lib/__templates__/nextjs/src/components/ui/pagination.tsx +127 -0
- package/lib/__templates__/nextjs/src/components/ui/popover.tsx +48 -0
- package/lib/__templates__/nextjs/src/components/ui/progress.tsx +31 -0
- package/lib/__templates__/nextjs/src/components/ui/radio-group.tsx +45 -0
- package/lib/__templates__/nextjs/src/components/ui/resizable.tsx +56 -0
- package/lib/__templates__/nextjs/src/components/ui/scroll-area.tsx +58 -0
- package/lib/__templates__/nextjs/src/components/ui/select.tsx +190 -0
- package/lib/__templates__/nextjs/src/components/ui/separator.tsx +28 -0
- package/lib/__templates__/nextjs/src/components/ui/sheet.tsx +139 -0
- package/lib/__templates__/nextjs/src/components/ui/sidebar.tsx +726 -0
- package/lib/__templates__/nextjs/src/components/ui/skeleton.tsx +13 -0
- package/lib/__templates__/nextjs/src/components/ui/slider.tsx +63 -0
- package/lib/__templates__/nextjs/src/components/ui/sonner.tsx +40 -0
- package/lib/__templates__/nextjs/src/components/ui/spinner.tsx +16 -0
- package/lib/__templates__/nextjs/src/components/ui/switch.tsx +31 -0
- package/lib/__templates__/nextjs/src/components/ui/table.tsx +116 -0
- package/lib/__templates__/nextjs/src/components/ui/tabs.tsx +66 -0
- package/lib/__templates__/nextjs/src/components/ui/textarea.tsx +18 -0
- package/lib/__templates__/nextjs/src/components/ui/toggle-group.tsx +83 -0
- package/lib/__templates__/nextjs/src/components/ui/toggle.tsx +47 -0
- package/lib/__templates__/nextjs/src/components/ui/tooltip.tsx +61 -0
- package/lib/__templates__/nextjs/src/hooks/use-mobile.ts +19 -0
- package/lib/__templates__/nextjs/src/lib/utils.ts +6 -0
- package/lib/__templates__/nextjs/template.config.js +2 -2
- package/lib/__templates__/templates.json +2 -40
- package/lib/__templates__/vite/template.config.js +5 -3
- package/lib/cli.js +41 -4
- package/package.json +3 -3
- package/lib/__templates__/react-rsbuild/.coze +0 -11
- package/lib/__templates__/react-rsbuild/.vscode/settings.json +0 -121
- package/lib/__templates__/react-rsbuild/README.md +0 -61
- package/lib/__templates__/react-rsbuild/_gitignore +0 -97
- package/lib/__templates__/react-rsbuild/package.json +0 -31
- package/lib/__templates__/react-rsbuild/pnpm-lock.yaml +0 -997
- package/lib/__templates__/react-rsbuild/rsbuild.config.ts +0 -13
- package/lib/__templates__/react-rsbuild/scripts/build.sh +0 -14
- package/lib/__templates__/react-rsbuild/scripts/dev.sh +0 -51
- package/lib/__templates__/react-rsbuild/scripts/start.sh +0 -15
- package/lib/__templates__/react-rsbuild/src/App.tsx +0 -60
- package/lib/__templates__/react-rsbuild/src/index.css +0 -21
- package/lib/__templates__/react-rsbuild/src/index.html +0 -12
- package/lib/__templates__/react-rsbuild/src/index.tsx +0 -16
- package/lib/__templates__/react-rsbuild/tailwind.config.js +0 -9
- package/lib/__templates__/react-rsbuild/template.config.js +0 -54
- package/lib/__templates__/react-rsbuild/tsconfig.json +0 -17
- package/lib/__templates__/rsbuild/.coze +0 -11
- package/lib/__templates__/rsbuild/.vscode/settings.json +0 -7
- package/lib/__templates__/rsbuild/README.md +0 -61
- package/lib/__templates__/rsbuild/_gitignore +0 -97
- package/lib/__templates__/rsbuild/_npmrc +0 -22
- package/lib/__templates__/rsbuild/package.json +0 -24
- package/lib/__templates__/rsbuild/pnpm-lock.yaml +0 -888
- package/lib/__templates__/rsbuild/rsbuild.config.ts +0 -12
- package/lib/__templates__/rsbuild/scripts/build.sh +0 -14
- package/lib/__templates__/rsbuild/scripts/dev.sh +0 -51
- package/lib/__templates__/rsbuild/scripts/start.sh +0 -15
- package/lib/__templates__/rsbuild/src/index.css +0 -21
- package/lib/__templates__/rsbuild/src/index.html +0 -12
- package/lib/__templates__/rsbuild/src/index.ts +0 -5
- package/lib/__templates__/rsbuild/src/main.ts +0 -65
- package/lib/__templates__/rsbuild/tailwind.config.js +0 -9
- package/lib/__templates__/rsbuild/template.config.js +0 -54
- package/lib/__templates__/rsbuild/tsconfig.json +0 -16
- /package/lib/__templates__/{react-rsbuild → expo}/_npmrc +0 -0
|
@@ -12,7 +12,7 @@ EXPO_HOST="0.0.0.0"
|
|
|
12
12
|
EXPO_DIR="expo"
|
|
13
13
|
EXPO_PORT="9090"
|
|
14
14
|
WEB_URL="${COZE_PROJECT_DOMAIN_DEFAULT:-http://127.0.0.1:${SERVER_PORT}}"
|
|
15
|
-
ASSUME_YES="
|
|
15
|
+
ASSUME_YES="1"
|
|
16
16
|
EXPO_PUBLIC_BACKEND_BASE_URL="${EXPO_PUBLIC_BACKEND_BASE_URL:-$WEB_URL}"
|
|
17
17
|
|
|
18
18
|
|
|
@@ -204,7 +204,7 @@ fi
|
|
|
204
204
|
|
|
205
205
|
write_log "INFO" "==================== 启动 server 服务 ===================="
|
|
206
206
|
write_log "INFO" "正在执行:npm run server"
|
|
207
|
-
nohup npm run server > logs/app.log 2>&1 &
|
|
207
|
+
PORT="$SERVER_PORT" nohup npm run server > logs/app.log 2>&1 &
|
|
208
208
|
SERVER_PID=$!
|
|
209
209
|
if [ -z "${SERVER_PID}" ]; then
|
|
210
210
|
write_log "ERROR" "无法获取 server 后台进程 PID"
|
|
@@ -22,14 +22,14 @@ import {
|
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* # Screen 组件使用指南
|
|
25
|
-
*
|
|
25
|
+
*
|
|
26
26
|
* 核心原则:统一使用手动安全区管理 (padding),支持沉浸式布局,解决 iOS/Android 状态栏一致性问题。
|
|
27
|
-
*
|
|
27
|
+
*
|
|
28
28
|
* ## 1. 普通页面 (默认)
|
|
29
29
|
* - 场景:标准的白底或纯色背景页面,Header 在安全区下方。
|
|
30
30
|
* - 用法:`<Screen>{children}</Screen>`
|
|
31
31
|
* - 行为:自动处理上下左右安全区,状态栏文字黑色。
|
|
32
|
-
*
|
|
32
|
+
*
|
|
33
33
|
* ## 2. 沉浸式 Header (推荐)
|
|
34
34
|
* - 场景:Header 背景色/图片需要延伸到状态栏 (如首页、个人中心)。
|
|
35
35
|
* - 用法:`<Screen safeAreaEdges={['left', 'right', 'bottom']}>` (❌ 去掉 'top')
|
|
@@ -38,14 +38,14 @@ import {
|
|
|
38
38
|
* const insets = useSafeAreaInsets();
|
|
39
39
|
* <View style={{ paddingTop: insets.top + 12, backgroundColor: '...' }}>
|
|
40
40
|
* ```
|
|
41
|
-
*
|
|
41
|
+
*
|
|
42
42
|
* ## 3. 底部有 TabBar 或 悬浮按钮
|
|
43
43
|
* - 场景:页面底部有固定导航栏,或者需要精细控制底部留白。
|
|
44
44
|
* - 用法:`<Screen safeAreaEdges={['top', 'left', 'right']}>` (❌ 去掉 'bottom')
|
|
45
45
|
* - 配合:
|
|
46
46
|
* - 若是滚动页:`<ScrollView contentContainerStyle={{ paddingBottom: insets.bottom + 80 }}>`
|
|
47
47
|
* - 若是固定页:`<View style={{ paddingBottom: insets.bottom + 60 }}>`
|
|
48
|
-
*
|
|
48
|
+
*
|
|
49
49
|
* ## 4. 滚动列表/表单
|
|
50
50
|
* - 场景:长内容,需要键盘避让。
|
|
51
51
|
* - 用法:`<Screen>{children}</Screen>`
|
|
@@ -56,19 +56,19 @@ interface ScreenProps {
|
|
|
56
56
|
children: React.ReactNode;
|
|
57
57
|
/** 背景色,默认 #fff */
|
|
58
58
|
backgroundColor?: string;
|
|
59
|
-
/**
|
|
59
|
+
/**
|
|
60
60
|
* 状态栏样式
|
|
61
61
|
* - 'dark': 黑色文字 (默认)
|
|
62
62
|
* - 'light': 白色文字 (深色背景时用)
|
|
63
63
|
*/
|
|
64
64
|
statusBarStyle?: 'auto' | 'inverted' | 'light' | 'dark';
|
|
65
|
-
/**
|
|
65
|
+
/**
|
|
66
66
|
* 状态栏背景色
|
|
67
67
|
* - 默认 'transparent' 以支持沉浸式
|
|
68
68
|
* - Android 下如果需要不透明,可传入具体颜色
|
|
69
69
|
*/
|
|
70
70
|
statusBarColor?: string;
|
|
71
|
-
/**
|
|
71
|
+
/**
|
|
72
72
|
* 安全区控制 (关键属性)
|
|
73
73
|
* - 默认: ['top', 'left', 'right', 'bottom'] (全避让)
|
|
74
74
|
* - 沉浸式 Header: 去掉 'top'
|
|
@@ -96,7 +96,7 @@ const KeyboardAwareScrollable = ({
|
|
|
96
96
|
const styleArray = Array.isArray(originStyle) ? originStyle : originStyle ? [originStyle] : [];
|
|
97
97
|
const merged = Object.assign({}, ...styleArray);
|
|
98
98
|
const currentPB = typeof merged.paddingBottom === 'number' ? merged.paddingBottom : 0;
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
// 合并 paddingBottom (安全区 + 额外留白)
|
|
101
101
|
const enhancedContentStyle = [{ ...merged, paddingBottom: currentPB + extraPadding }];
|
|
102
102
|
|
|
@@ -123,7 +123,7 @@ const KeyboardAwareScrollable = ({
|
|
|
123
123
|
if (t === ScrollView) {
|
|
124
124
|
return <KeyboardAwareScrollView {...commonProps} />;
|
|
125
125
|
}
|
|
126
|
-
|
|
126
|
+
|
|
127
127
|
if (t === FlatList) {
|
|
128
128
|
return <KeyboardAwareFlatList {...commonProps} />;
|
|
129
129
|
}
|
|
@@ -145,12 +145,12 @@ export const Screen = ({
|
|
|
145
145
|
backgroundColor = '#fff',
|
|
146
146
|
statusBarStyle = 'dark',
|
|
147
147
|
statusBarColor = 'transparent',
|
|
148
|
-
safeAreaEdges = [],
|
|
148
|
+
safeAreaEdges = ['top', 'left', 'right', 'bottom'],
|
|
149
149
|
style,
|
|
150
150
|
}: ScreenProps) => {
|
|
151
151
|
const insets = useSafeAreaInsets();
|
|
152
152
|
const [keyboardShown, setKeyboardShown] = React.useState(false);
|
|
153
|
-
|
|
153
|
+
|
|
154
154
|
useEffect(() => {
|
|
155
155
|
const showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';
|
|
156
156
|
const hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';
|
|
@@ -227,16 +227,16 @@ export const Screen = ({
|
|
|
227
227
|
|
|
228
228
|
// 若子树不可滚动,则外层使用 KeyboardAwareScrollView 提供“全局页面滑动”能力
|
|
229
229
|
const useScrollContainer = !childIsNativeScrollable;
|
|
230
|
-
|
|
230
|
+
|
|
231
231
|
// 2. 滚动容器配置
|
|
232
232
|
// 如果使用滚动容器,则使用 KeyboardAwareScrollView 替代原有的 ScrollView
|
|
233
233
|
const Container = useScrollContainer ? KeyboardAwareScrollView : View;
|
|
234
234
|
|
|
235
235
|
const containerProps = useScrollContainer ? {
|
|
236
|
-
contentContainerStyle: {
|
|
236
|
+
contentContainerStyle: {
|
|
237
237
|
flexGrow: 1,
|
|
238
238
|
// 滚动模式下,Bottom 安全区由内容容器处理,保证内容能完整显示且不被 Home Indicator 遮挡,同时背景色能延伸到底部
|
|
239
|
-
paddingBottom: hasBottom ? (keyboardShown ? 0 : insets.bottom) : 0,
|
|
239
|
+
paddingBottom: hasBottom ? (keyboardShown ? 0 : insets.bottom) : 0,
|
|
240
240
|
},
|
|
241
241
|
keyboardShouldPersistTaps: 'handled' as const,
|
|
242
242
|
showsVerticalScrollIndicator: false,
|
|
@@ -290,8 +290,8 @@ export const Screen = ({
|
|
|
290
290
|
// 核心原则:严禁使用 SafeAreaView,统一使用 View + padding 手动管理
|
|
291
291
|
<View style={wrapperStyle}>
|
|
292
292
|
{/* 状态栏配置:强制透明背景 + 沉浸式,以支持背景图延伸 */}
|
|
293
|
-
<StatusBar
|
|
294
|
-
style={statusBarStyle}
|
|
293
|
+
<StatusBar
|
|
294
|
+
style={statusBarStyle}
|
|
295
295
|
backgroundColor={statusBarColor}
|
|
296
296
|
translucent
|
|
297
297
|
/>
|
|
@@ -325,6 +325,6 @@ const styles = StyleSheet.create({
|
|
|
325
325
|
innerContainer: {
|
|
326
326
|
flex: 1,
|
|
327
327
|
// 确保内部容器透明,避免背景色遮挡
|
|
328
|
-
backgroundColor: 'transparent',
|
|
328
|
+
backgroundColor: 'transparent',
|
|
329
329
|
},
|
|
330
|
-
});
|
|
330
|
+
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import '@expo/metro-runtime';
|
|
1
2
|
import { registerRootComponent } from 'expo';
|
|
2
3
|
import { ExpoRoot } from 'expo-router';
|
|
3
4
|
|
|
@@ -8,4 +9,4 @@ export function App() {
|
|
|
8
9
|
return <ExpoRoot context={ctx} />;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
registerRootComponent(App);
|
|
12
|
+
registerRootComponent(App);
|
|
@@ -18,7 +18,7 @@ try {
|
|
|
18
18
|
try {
|
|
19
19
|
depcheckOutput = execSync('npx depcheck --json', {
|
|
20
20
|
encoding: 'utf-8',
|
|
21
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
21
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
22
22
|
});
|
|
23
23
|
} catch (execError) {
|
|
24
24
|
// depcheck 返回非零退出码时仍然有输出
|
|
@@ -30,10 +30,34 @@ try {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
const result = JSON.parse(depcheckOutput);
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
// 获取缺失的依赖
|
|
35
35
|
const missing = result.missing || {};
|
|
36
|
-
|
|
36
|
+
|
|
37
|
+
// 需要忽略的文件模式
|
|
38
|
+
const ignoreFilePatterns = [
|
|
39
|
+
/template\.config\.(ts|js)$/, // 模板配置文件
|
|
40
|
+
/\.template\./, // 其他模板文件
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
// 过滤包:排除内部别名和只被模板文件引用的包
|
|
44
|
+
const missingPackages = Object.keys(missing).filter(pkg => {
|
|
45
|
+
// 排除内部路径别名
|
|
46
|
+
if (pkg.startsWith('@api/') || pkg.startsWith('@/') || pkg === '@api') {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// 获取引用该包的文件列表
|
|
51
|
+
const referencingFiles = missing[pkg] || [];
|
|
52
|
+
|
|
53
|
+
// 过滤掉模板配置文件
|
|
54
|
+
const nonTemplateFiles = referencingFiles.filter(file => {
|
|
55
|
+
return !ignoreFilePatterns.some(pattern => pattern.test(file));
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// 只有当存在非模板文件引用时才保留该包
|
|
59
|
+
return nonTemplateFiles.length > 0;
|
|
60
|
+
});
|
|
37
61
|
|
|
38
62
|
if (missingPackages.length === 0) {
|
|
39
63
|
console.log('✅ 没有发现缺失的依赖!');
|
|
@@ -44,30 +68,31 @@ try {
|
|
|
44
68
|
missingPackages.forEach((pkg, index) => {
|
|
45
69
|
const files = missing[pkg];
|
|
46
70
|
console.log(` ${index + 1}. ${pkg}`);
|
|
47
|
-
console.log(
|
|
71
|
+
console.log(
|
|
72
|
+
` 被引用于: ${files.slice(0, 2).join(', ')}${files.length > 2 ? ' ...' : ''}`,
|
|
73
|
+
);
|
|
48
74
|
});
|
|
49
75
|
|
|
50
76
|
console.log('\n🚀 开始安装...\n');
|
|
51
77
|
|
|
52
78
|
// 使用 expo install 安装所有缺失的包
|
|
53
79
|
const packagesToInstall = missingPackages.join(' ');
|
|
54
|
-
|
|
80
|
+
|
|
55
81
|
try {
|
|
56
82
|
execSync(`pnpm expo install ${packagesToInstall}`, {
|
|
57
|
-
stdio: 'inherit'
|
|
83
|
+
stdio: 'inherit',
|
|
58
84
|
});
|
|
59
|
-
|
|
85
|
+
|
|
60
86
|
console.log('\n✅ 所有缺失的依赖已安装完成!');
|
|
61
87
|
} catch (installError) {
|
|
62
88
|
console.log('\n⚠️ expo install 失败,尝试使用 npm install...\n');
|
|
63
|
-
|
|
89
|
+
|
|
64
90
|
execSync(`npm install ${packagesToInstall}`, {
|
|
65
|
-
stdio: 'inherit'
|
|
91
|
+
stdio: 'inherit',
|
|
66
92
|
});
|
|
67
|
-
|
|
93
|
+
|
|
68
94
|
console.log('\n✅ 所有缺失的依赖已通过 npm 安装完成!');
|
|
69
95
|
}
|
|
70
|
-
|
|
71
96
|
} catch (error) {
|
|
72
97
|
if (error.message.includes('depcheck')) {
|
|
73
98
|
console.error('❌ depcheck 未安装或运行失败');
|
|
@@ -77,4 +102,3 @@ try {
|
|
|
77
102
|
}
|
|
78
103
|
process.exit(1);
|
|
79
104
|
}
|
|
80
|
-
|
|
@@ -8,29 +8,29 @@ const config = getDefaultConfig(__dirname);
|
|
|
8
8
|
const existingBlockList = [].concat(config.resolver.blockList || []);
|
|
9
9
|
|
|
10
10
|
config.resolver.blockList = [
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
...existingBlockList,
|
|
12
|
+
/.*\/\.expo\/.*/, // Expo 的缓存和构建产物目录
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
// 1. 原生代码 (Java/C++/Objective-C)
|
|
15
|
+
/.*\/react-native\/ReactAndroid\/.*/,
|
|
16
|
+
/.*\/react-native\/ReactCommon\/.*/,
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
// 2. 纯开发和调试工具
|
|
19
|
+
// 这些工具只在开发电脑上运行,不会被打包到应用中
|
|
20
|
+
/.*\/@typescript-eslint\/eslint-plugin\/.*/,
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
// 3. 构建时数据
|
|
23
|
+
// 这个数据库只在打包过程中使用,应用运行时不需要
|
|
24
|
+
/.*\/caniuse-lite\/data\/.*/,
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
// 4. 通用规则
|
|
27
|
+
/.*\/__tests__\/.*/, // 排除所有测试目录
|
|
28
|
+
/.*\.git\/.*/, // 排除 Git 目录
|
|
29
29
|
];
|
|
30
30
|
|
|
31
31
|
/*
|
|
32
32
|
const apiProxy = createProxyMiddleware({
|
|
33
|
-
target: 'http://localhost:
|
|
33
|
+
target: 'http://localhost:5000',
|
|
34
34
|
logLevel: 'debug',
|
|
35
35
|
});
|
|
36
36
|
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "<%= appName %>",
|
|
3
|
-
"main": "client/index.js",
|
|
4
3
|
"version": "1.0.0",
|
|
5
4
|
"private": true,
|
|
5
|
+
"main": "client/index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
7
|
+
"build": "bash .cozeproj/scripts/deploy_build.sh",
|
|
8
|
+
"check-deps": "npx depcheck",
|
|
9
|
+
"dev": "bash .cozeproj/scripts/deploy_run.sh",
|
|
10
10
|
"preinstall": "npx only-allow pnpm",
|
|
11
|
-
"
|
|
12
|
-
"lint": "expo lint",
|
|
11
|
+
"postinstall": "node ./client/scripts/install-missing-deps.js",
|
|
13
12
|
"install-missing": "node ./client/scripts/install-missing-deps.js",
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
13
|
+
"lint": "expo lint",
|
|
14
|
+
"server": "NODE_ENV=development tsx ./src/index.ts",
|
|
15
|
+
"start": "expo start --web",
|
|
16
|
+
"test": "jest --watchAll"
|
|
17
17
|
},
|
|
18
18
|
"jest": {
|
|
19
19
|
"preset": "jest-expo"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"
|
|
23
|
-
"
|
|
22
|
+
"@aws-sdk/client-s3": "^3.958.0",
|
|
23
|
+
"@aws-sdk/lib-storage": "^3.958.0",
|
|
24
|
+
"@expo/metro-runtime": "^6.1.2",
|
|
24
25
|
"@expo/vector-icons": "^15.0.0",
|
|
25
26
|
"@react-native-async-storage/async-storage": "^2.2.0",
|
|
26
27
|
"@react-native-community/datetimepicker": "^8.5.0",
|
|
@@ -31,7 +32,12 @@
|
|
|
31
32
|
"@react-navigation/native": "^7.0.14",
|
|
32
33
|
"ajv": "^8.17.1",
|
|
33
34
|
"ajv-formats": "^3.0.1",
|
|
35
|
+
"connect": "^3.7.0",
|
|
36
|
+
"coze-coding-dev-sdk": "0.5.0",
|
|
34
37
|
"dayjs": "^1.11.19",
|
|
38
|
+
"drizzle-kit": "^0.31.8",
|
|
39
|
+
"drizzle-orm": "^0.45.1",
|
|
40
|
+
"drizzle-zod": "^0.8.3",
|
|
35
41
|
"expo": "^54.0.7",
|
|
36
42
|
"expo-auth-session": "^7.0.9",
|
|
37
43
|
"expo-av": "~16.0.6",
|
|
@@ -51,6 +57,8 @@
|
|
|
51
57
|
"expo-symbols": "~1.0.6",
|
|
52
58
|
"expo-system-ui": "~6.0.9",
|
|
53
59
|
"expo-web-browser": "~15.0.10",
|
|
60
|
+
"express": "^4.22.1",
|
|
61
|
+
"pg": "^8.16.3",
|
|
54
62
|
"react": "19.1.0",
|
|
55
63
|
"react-dom": "19.1.0",
|
|
56
64
|
"react-native": "0.81.5",
|
|
@@ -69,14 +77,15 @@
|
|
|
69
77
|
"zod": "^4.2.1"
|
|
70
78
|
},
|
|
71
79
|
"devDependencies": {
|
|
72
|
-
"babel-preset-expo": "^54.0.9",
|
|
73
80
|
"@babel/core": "^7.25.2",
|
|
74
81
|
"@eslint/js": "^9.27.0",
|
|
75
82
|
"@types/express": "^5.0.6",
|
|
76
83
|
"@types/jest": "^29.5.12",
|
|
84
|
+
"@types/pg": "^8.16.0",
|
|
77
85
|
"@types/react": "~19.1.0",
|
|
78
86
|
"@types/react-test-renderer": "19.1.0",
|
|
79
87
|
"babel-plugin-module-resolver": "^5.0.2",
|
|
88
|
+
"babel-preset-expo": "^54.0.9",
|
|
80
89
|
"chalk": "^4.1.2",
|
|
81
90
|
"depcheck": "^1.4.7",
|
|
82
91
|
"eslint": "^9.27.0",
|
|
@@ -90,6 +99,7 @@
|
|
|
90
99
|
"jest": "^29.2.1",
|
|
91
100
|
"jest-expo": "~54.0.10",
|
|
92
101
|
"react-test-renderer": "19.1.0",
|
|
102
|
+
"tsx": "^4.21.0",
|
|
93
103
|
"typescript": "^5.8.3",
|
|
94
104
|
"typescript-eslint": "^8.32.1"
|
|
95
105
|
},
|