用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/LSTM-Kirigaya/jinhui-skills --skill rn-app-builder命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | rn-app-builder |
| description | 基于真实项目沉淀的 React Native 移动端 App 一键构建方案。覆盖 Expo 初始化、monorepo 共享包、鉴权路由、API 适配、主题系统与构建发布。 |
| tags | ["react-native","expo","mobile-app","typescript","monorepo"] |
| model | deepseek-chat |
| rootUrl | https://cdn.jsdelivr.net/gh/LSTM-Kirigaya/jinhui-skills@main/skills/rn-app-builder/SKILL.md |
一键搭建或复刻一个生产级 Expo + React Native + TypeScript 移动端 App。适用于:
apps/mobilepackages/core(类型/纯计算)与 packages/api-client(平台无关 HTTP 客户端)AuthProvider + React Navigation 7,启动自检 token,未登录进登录页,已登录进主 Tabfetch、AsyncStorage、文件上传,业务代码保持平台无关python3 skills/rn-app-builder/scripts/create-rn-app.py \
--target apps/mobile \
--app-name MyApp \
--package-name com.example.myapp \
--api-base-url http://127.0.0.1:3010
生成后按需替换:
app.json 中的应用名、scheme、bundleIdentifier / package、图标src/config.ts 中的 API_BASE_URLsrc/screens/LoginScreen.tsx 的登录方式(密码 / 短信 / 微信)src/navigation/RootNavigator.tsx 的业务路由与 Tabsrc/theme/index.ts 的品牌色apps/mobile/
App.tsx
app.json
index.ts
package.json
babel.config.js
metro.config.js
tsconfig.json
tsconfig.typecheck.json
src/
api.ts # 创建 apiClient,注入 RN 适配器与 AsyncStorage
config.ts # API_BASE_URL、版本号、调试开关
env.d.ts # 环境变量类型
theme/ # colors / spacing / radius / shadow
components/ # Page、AppButton、Card 等基础组件
providers/ # AuthProvider、DialogProvider 等
navigation/ # RootNavigator、TabBar、types
screens/ # LoginScreen、HomeScreen、ProfileScreen ...
hooks/ # useHomeDashboard 等业务 hooks
utils/ # date、image、errors 等工具
packages/
core/ # DTO、枚举、纯计算(平台无关)
api-client/ # 适配器式 HTTP 客户端 + TokenStorage 接口
职责单一:
AsyncStorage 中是否有 tokenisBootstrapping / isAuthenticatedloginWithPassword、loginWithSMSCode、loginWithWechat、logoutRootNavigator 据此渲染登录栈或主 Tabpackages/api-client 定义接口:
interface ApiClientAdapters {
request(url: string, options?: { method?; headers?; body?; timeoutMs? }): Promise<{ status; data; headers }>
uploadFile(input: UploadFileInput): Promise<{ status; data; headers }>
tokenStorage: {
getAccessToken(): Promise<string | null>
setTokens(tokens: { accessToken; refreshToken; userId }): Promise<void>
clearTokens(): Promise<void>
}
}
apps/mobile/src/api.ts 注入:
fetch 做请求,自动 JSON 序列化AsyncStorage 存取 tokenXMLHttpRequest 做多文件上传(带进度与超时)RootStack
├── 未登录:Login
└── 已登录:MainTabs
├── HomeTab
├── StatsTab
├── CommunityTab
└── ProfileTab
业务子页面(分析、记录、设置、消息等)统一挂在 RootStack 下,通过 navigation.navigate('ScreenName') 跳转。
统一导出:
export const colors = { brand, brandDark, background, surface, text, textSecondary, danger, warning, ... }
export const spacing = { xs, sm, md, lg, xl }
export const radius = { sm, md, lg, pill }
export const shadow = { shadowColor, shadowOpacity, shadowRadius, shadowOffset, elevation }
所有 screen / component 只引用 theme,不硬编码色值。
{
"expo": "~56.0.0",
"react": "19.2.3",
"react-native": "0.85.3",
"@react-navigation/native": "^7.3.1",
"@react-navigation/bottom-tabs": "^7.18.0",
"@react-navigation/native-stack": "^7.17.3",
"@react-native-async-storage/async-storage": "2.2.0",
"react-native-safe-area-context": "~5.7.0",
"react-native-screens": "4.25.2",
"react-native-svg": "15.15.4",
"lucide-react-native": "^1.20.0"
}
按需追加:
expo-image-picker — 相册 / 拍照expo-file-system — 本地文件读写expo-clipboard — 剪贴板expo-media-library — 保存图片到相册所有 TextInput 必须支持 iOS Simulator / Android Emulator 的电脑键盘:
value + onChangeTextautoCapitalize="none" autoCorrect={false}inputMode="email" keyboardType="email-address"inputMode="numeric"returnKeyType + onSubmitEditing,用 ref 聚焦下一项或提交npm install
npm --workspace apps/mobile run typecheck
npx expo export --platform ios --output-dir /tmp/mobile-ios-export --clear
运行:
npm --workspace apps/mobile run start
# 或
npm --workspace apps/mobile run ios
npm --workspace apps/mobile run android
确认:
packages/core,保持 screens 薄references/stack.md — 依赖版本与脚本references/structure.md — 目录结构详解references/auth-api.md — 鉴权与 API 客户端references/simulator-keyboard-input.md — 模拟器键盘输入规范references/verification.md — 验证与发布检查User: 帮我基于一个已有后端,从零搭建一个 React Native 移动应用,放到 apps/mobile,包含登录、首页、我的三个 Tab。
AI:
我会使用 rn-app-builder 帮你一键搭建 apps/mobile:
packages/core 存放用户、首页数据等 DTO。packages/api-client 作为平台无关 HTTP 客户端。apps/mobile/src/api.ts 注入 fetch + AsyncStorage。AuthProvider 做 token 自检与登录状态管理。app.json、主题色、API 基地址后即可运行验证。User: 我们的 monorepo 里已经有 web 和小程序了,现在想加一个原生 App,共享类型和 API 请求逻辑,该怎么做?
AI:
按 rn-app-builder 的 monorepo 模式来做:
packages/core 定义共享 DTO 与纯函数(web/小程序/App 共用)。packages/api-client 定义 ApiClientAdapters 接口与业务请求方法。apps/mobile,注入 RN 专属的 fetch、AsyncStorage、文件上传适配器。packages/*。tsconfig.json paths 指向本地 packages/*/src。