yoyoj-rn — RN 的脚手架工具可以不是 @react-native-community/cli

是不是感觉如果 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(useI18n hook + 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 索引。
  • 组件与资源:IconByVariantAssetByVariant 支持按 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,直接使用 Themei18n,不必再配置样式系统。
  • 加入图标:放到 themes/assests/icons/ 并遵循命名规则,IconByVariant 自动可用。
  • 环境差异:复制 config/local.ts.examplelocal.ts 并配置,不必触碰编译相关的底层设置。

结语

如果你和我一样在多个 RN 项目之间往返,希望把时间更多花在产品与体验上而不是工程琐事,yoyoj-rn 可以当作你的工程化起点:把重复工作交给模板,把创造力还给你。

相关推荐
如果你好2 小时前
一文搞懂 JavaScript 原型链:从本质到实战应用
前端·javascript
醉风塘2 小时前
NPM:从“模块之痛”到“生态之基”的演化史
前端·npm·node.js
Mapmost2 小时前
【高斯泼溅】大场景可视化的「速度与激情」:Mapmost 3DGS实时渲染技术拆解
前端
研☆香2 小时前
深入解析JavaScript的arguments对象
开发语言·前端·javascript
parksben2 小时前
告别 iframe 通信的 “飞鸽传书”:Webpage Tunnel 上手指南
前端·javascript·前端框架
全栈前端老曹2 小时前
【前端权限】 权限变更热更新
前端·javascript·vue·react·ui框架·权限系统·前端权限
写代码的皮筏艇2 小时前
react中的useCallback
前端·javascript
用户8168694747252 小时前
Fiber 双缓存架构与 Diff 算法
前端·react.js
AAA简单玩转程序设计2 小时前
Java集合“坑王”:ArrayList为啥越界还能浪?
java·前端