大多数React Native起步模板能让你几分钟跑起一个屏幕,但真正在半年后吃掉时间的,是演示里永远碰不到的那几块:手机没信号时写操作去哪了、登录令牌存在哪、第一周定下的目录规则到第六个月还守不守得住。Bareship这个模板想解决的正是这几件事,而且它把答案写进了构建流程,而不是写在一页没人看的wiki上。

打开网易新闻 查看精彩图片

它是一个免费、MIT许可的模板,面向裸React Native 0.87应用。一条命令 npx create-bareship Acme,就能得到一个iOS和Android应用:离线时点的赞、做的编辑会被保存,重启后仍在,手机重新联网后发出;目录规则由ESLint检查,而不是靠代码评审;Claude Code、Cursor或Copilot拿到的规则和团队完全一致。在需要之前,它不需要后端、Firebase项目或苹果账号。

离线写入的四种模式

应用里每一次写操作都必须从四种模式中选一种,这样用户始终知道自己那一下操作的下场。排队写入会落盘,重启后按发生顺序重放,并且每次尝试都带同一个幂等键——同一次写入发两遍也只生效一次。页头下方有一条横幅,统计等待同步的改动数量。没有选任何模式的写入在离线时会立刻失败,不会有东西被意外塞进队列。

规则由构建来执行

架构写在linter里,不在wiki页面上。分层只能向下引用,功能模块不能伸手进彼此的文件夹,屏幕上的文字必须走翻译,无障碍统一使用一套ARIA属性。ESLint和dependency-cruiser会让不合规的检查失败。当某条规则不适合你的应用,你在一处改掉并写下原因:模板背后的决策以ADR(架构决策记录)的形式保存在仓库里。

这套约束的出发点很直接:每个新项目都花一两周重建管道,队列、令牌存放、目录规则每次做得略有不同,缺口总在后来才暴露——来自弱网用户的bug报告,或者某个功能文件夹悄悄开始从另外三个文件夹导入。

为AI编码代理准备

仓库自带一份 AGENTS.md、决策记录和React Native代理技能,外加生成器(pnpm gen feature | screen | endpoint),按代码库其余部分的写法生成schema、API钩子、mock、字符串和测试。遵循这些规则的代理,写出的代码要通过和团队一样的检查。

作者用Claude Code构建了Bareship的很大一部分,所以这些文件从一开始就在代理身上测试过:当代理破坏规则时,修复被写进linter或AGENTS.md,而不是写进pull request里的一条评论。

零账号启动

开发构建从应用内的mock后端提供示例数据,所以在任何后端存在之前,你就能登录、刷信息流、在模拟器或真机上测试离线模式。Crashlytics、Analytics、Remote Config和推送在你加入Firebase文件后开启,没有文件时回退到日志。令牌从第一天起就存在Keychain和Keystore里。

另外还包含:明暗主题、英语和印地语(可开启从右到左支持)、深链接、强制更新与维护页面、dev/staging/prod三套环境、fastlane发布通道,以及一个能装到手机上的演示构建。

上手流程是 npx create-bareship Acme,然后 cd Acme,再 pnpm android(或 pnpm ios)。create-bareship会先检查你的工具链,询问bundle id和显示名称,装好一切并完成首次提交。实际创建应用耗时1分15秒;首次Android构建要编译原生库,在作者的8 GB M1上约20分钟,更快的机器上几分钟,之后的构建就快了。

Bareship目前版本为0.3.2。接下来要做的是重新打开仓库的CI,以及一系列拆解各部分的文章,从离线队列和幂等键开始。