
是不是感觉如果 RN 不使用 expo 搭建项目会很费劲,重复配置导航/国际化/主题,调试 Metro、SVG、路径别名花掉半天,团队间风格不统一、又怕临时改配置把项目搞崩。然而,直接使用原生脚手架搭建的项目又过于简单,什么都没有?
我在开发几次公司的 RN 项目后也开始有了这种苦恼------真正浪费的是"每次从头重复那些琐碎但重要的工程工作"。最终我结合几次实际的项目经验和社区一些好的做法和建议,我做了这样一个React-native 项目的脚手架 ------ yoyoj-rn - npm。
我的出发点很简单:把那些重复且容易出错的工程工作做好一次,然后把可复用、可扩展、对团队友好的基础能力交给大家,让我把精力放回到产品和体验本身。
我发布后自己试用了一段时间,做了部分功能的微调,现在已经稳定能产出一个还算让我满意的 RN 项目脚手架。这里也发布出来,希望也能给大家提供便利,同时我也虚心接受大家的一些建议,大家可以发在评论区讨论。
工具入口 -> yoyoj-rn - npm
快速结论对比(一分钟了解差别)
- RN 原生脚手架:启动快,但只给你骨架,工程能力(主题、i18n、设计 tokens、资源约定)需要自己搭;第一次可跑通但二次复用成本高。
- yoyoj-rn 模板:启动稍微多做一点准备,但产出的是一套工程化的、可立即使用的项目结构;对团队协作、CI、AI 智能分析友好------省下来的不是几分钟,而是后续的几十到几百小时。
主要优势(为什么会帮你省事)
- 一次性工程化:主题、样式 tokens、国际化、导航结构、资源约定均已实现。
- 一致性和可维护性:模板内的约定让新人能快速理解项目结构,减少沟通成本。
- AI 友好:清晰的路径别名、统一的资源加载与命名空间,方便自动化工具或 LLM 精确索引与推断。
- 开箱即用的原子组件与工具:图标/图像按变体加载、深色模式资源自动选择、统一的
useTheme()与useI18n()。
快速开始
bash
npx yoyoj-rn <projectName>
CLI 入口: cli/init.js
(工作流:用 @react-native-community/cli 初始化 -> 拷贝模版 -> 注入 codegenConfig 与 TS 路径别名 -> 安装依赖并初始化 Git)
模板里你能直接拿来用的东西(摘要)
- TypeScript 全量类型支持与良好的类型定义
- React Navigation 的标准化路由与类型化参数
- i18n(
useI18nhook +en.json/zh-cn.json) - 主题系统(浅色/深色/系统 +
useTheme()) - 原子化组件(
IconByVariant/AssetByVariant)与资源组织约定 - Axios 实例与环境配置模板(
dev/test/prod+local示例) - Metro 与 Babel 已配置:SVG、路径别名
@指向src、支持 require.context
生成后的项目概览
bash
src/
├── App.tsx # 入口,挂载 Theme 与 Navigation
├── components/ # 原子/模版组件(方便复用和测试)
├── config/ # 环境配置(dev/test/prod/local 示例)
├── hooks/ # 常用 Hook(含 i18n)
├── navigation/ # 路由容器与路径枚举, 类型化友好
├── screens/ # 示例页面(Startup/Example)
├── services/ # Axios 实例等服务层封装
├── themes/ # 设计 tokens(colors/fonts/layout/gutter)与资源加载约定
└── translations/ # i18n 资源与类型补充
关键模块会怎么帮你:
- 入口与主题:App 已经把
ThemeProvider、状态栏、安全区和 Navigation 包起来了,接入新的页面只需专注 UI。 - 导航与路径:统一的
paths.ts+ 强类型types.ts,避免运行时字符串错误。 - 国际化:内置
useI18n(),默认命名空间与资源位置固定,方便 CI 校验和 AI 索引。 - 组件与资源:
IconByVariant、AssetByVariant支持按 light/dark/variant 自动加载,设计师资源与代码命名约定一致。
Metro / Babel 与开发脚本
- Metro 已配置 SVG 与 require.context 调试友好(见
template/metro.config.js) - Babel 路径别名
@指向src(见template/babel.config.js) - 常用脚本:
yarn start/yarn ios/yarn android/yarn lint/yarn test
面向 AI 与团队的识别提示(让自动化工具读懂项目)
- 全局路径别名
@=./src,便于静态分析器与智能提示。 - 主题与资源的统一入口(
themes)使模型能准确定位颜色/字体/图片约定。 - 国际化资源和默认命名空间固定在
translations,便于自动化检测与翻译流水线。 - 资源加载集中在
themes/assests/getAssetsContext.ts(已开启unstable_allowRequireContext),对代码生成或图像替换操作友好。
如何在实际开发中省时间(示例场景)
- 新页面:创建
screens/子目录、注册路径到paths.ts,直接使用Theme与i18n,不必再配置样式系统。 - 加入图标:放到
themes/assests/icons/并遵循命名规则,IconByVariant自动可用。 - 环境差异:复制
config/local.ts.example为local.ts并配置,不必触碰编译相关的底层设置。
结语
如果你和我一样在多个 RN 项目之间往返,希望把时间更多花在产品与体验上而不是工程琐事,yoyoj-rn 可以当作你的工程化起点:把重复工作交给模板,把创造力还给你。