把领域知识打包成 SKILL.md、让 AI 编程智能体按需加载的 Agent Skills 机制正在各类编码工具里铺开,Expo 团队也交出了官方答卷:开源 expo/skills 仓库用 25 个技能覆盖 Expo 应用的构建、部署、升级与调试,MIT 协议,已有约 2700 个 star。对天天和 React Native 打交道的工程师,这是目前最成体系的一套移动端官方技能。本文按"技能全景 → 安装接入 → web-to-native 深入 → 工程细节与建议"展开。
1、概述
仓库的官方定位是"来自 Expo 团队的官方 AI 智能体技能,用于构建、部署、升级和调试 Expo 应用"。背景很实际:通用大模型对 React Native 与 Expo 的认知混着大量过时写法,New Architecture、Expo Router、DOM 组件这些近一两年才稳定的能力,模型要么没见过,要么给旧答案。
每个技能就是一个目录:一份 SKILL.md,front matter 写清触发条件与适用边界;一份面向 OpenAI Codex 的 agents/openai.yaml;长尾细节放 references/ 参考文档。知识源仍是 Expo 官方文档与 Expo、EAS(Expo Application Services)两套 CLI,技能本质是教智能体正确使用这些工具的操作手册——写码前先读,输出质量就有了下限。
2、技能全景
25 个技能分四层:
| 分层 | 技能 | 职责 |
|---|---|---|
| 入口 | expo-overview |
识别任务意图,路由到具体技能 |
| 框架层 | expo-router 等 16 个 |
路由、动画、原生 UI、数据、原生模块 |
| 服务层 | eas-* 共 7 个 |
构建上架、热更新、托管、云端模拟器 |
| 实验层 | expo-migrate-module |
Modules API 从 1.0 迁到 2.0 宏 API |
24 个正式技能加 1 个实验技能,实验技能随底层 API 稳定后会转正进正式分组。expo-overview 是设计亮点——一个显式的意图路由器:
不要只凭项目文件猜该用哪个技能——先确认任务是 Expo 或 EAS 相关,再读用户目标,分类后路由。
它的触发条件很具体:请求或需求文档提到 Expo、EAS、Expo Go,或 package.json 里有 expo 依赖,"加导航""升级 SDK""上架 App Store"这类口语表达都会映射到对应技能,等于给智能体装了一个领域意图识别器。请求没点名具体工具时也从这里进——先路由,再动手。
框架层覆盖很细:expo-animation 管动画手势,expo-native-ui 管原生观感,expo-data-fetching 管请求、缓存与离线,expo-dom 管在原生 App 里跑 Web 代码,expo-brownfield 管把 Expo 嵌进现成 iOS/Android 工程,expo-upgrade 管 SDK 升级与依赖冲突。服务层 7 个 eas-* 技能全围绕付费的 EAS 展开,且每个技能都会先讲清费用与套餐限制,免得智能体替你刷出账单。
3、安装与接入
通用路径基于 skills CLI,支持 Cursor、Copilot、Windsurf、Gemini、Cline 等,在项目根目录执行:
# 安装全部技能
npx skills@latest add expo/skills --skill '*'
# 后续更新已装技能
npx skills@latest update
执行后重启智能体会话,让它重新发现 SKILL.md;'*' 为全量安装,也可换单个技能名按需引入。两种方式装的是同一套技能,差别只在分发通道。Claude Code 与 Codex 走插件市场更省事:
# Claude Code 官方插件市场
claude plugin install expo@claude-plugins-official
# OpenAI Codex 精选插件
codex plugin add expo@openai-curated
插件方式自动捆绑配套的 MCP(Model Context Protocol)服务器:智能体能实时查 Expo 文档、看构建状态、取崩溃数据、截模拟器屏幕。技能给知识,MCP 给现场数据,两条通道互补。
4、web-to-native 深入
话题性最强的是 expo-web-to-native:把现成 Web React 应用迁成 iOS/Android 原生应用,支持 Next.js、Vite 与 CRA(Create React App),工作流六步:评估 → 脚手架 → DOM 壳 → 逐屏替换 → 接数据 → 发布。
评估阶段要求通读仓库,产出 migration-progress.md,把屏幕分桶:直接移植、立即原生化、延后原生化、混合方案;随后用 create-expo-app 建工程,把 Web 路由镜像到 Expo Router——Next.js 的路由树几乎一对一映射。第三步是精髓,用 DOM 组件给整个 Web UI 先包一层壳:
'use dom';
import { useState } from 'react';
export default function Cart() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>加购 {count} 件</button>;
}
'use dom' 指令让组件跑在原生 WebView 里,Web 代码几乎不改就能先上车,第一天就有可发布的 App——这是技能定义的首个里程碑。之后进入"绞杀者"节奏:每次只原生化一个高价值屏幕,用 @expo/ui 重建界面,应用全程可发布。技能还建议把整个迁移作为目标循环交给智能体自主推进,而不是人盯着手动改屏。
参考文档同样值得读:false-friends.md 专收"形似神不似"的坑——Server Components 要拆成请求加展示组件,localStorage 与 Cookie 会话要换方案,Stripe 是"分叉而非替换",原生端改走 RevenueCat 的应用内购买(IAP);verify-on-device.md 要求每迁完一屏就真机对比新旧两版,而非只看构建通过。技能的立场很鲜明:验证标准是"跑起来对不对",不是"编译过没过"。
5、工程化细节
几个细节说明这不是赶工的营销项目。技能按渐进披露组织,SKILL.md 只留触发条件与流程,细节沉到 references/——expo-upgrade 一个技能就挂了 7 份参考文档,上下文占用可控。遥测默认关闭,用 EXPO_SKILLS_TELEMETRY 环境变量开关。仓库还自带评估体系:.claude/skills/expo-skill-eval 下有 iOS、Android、Web 三端截图脚本与视觉评分规则,技能迭代有回归兜底。
6、使用建议
装技能前先想清楚团队卡在哪:纯 UI 开发优先 expo-native-ui 与 expo-animation;存量 Web 迁移只需 expo-web-to-native 加 expo-router;上架发版才轮到 eas-*。EAS 技能涉及付费服务,执行前先确认预算。
仓库已有超过 140 次提交,迭代快,建议随 SDK 升级跑一次更新,也可以只更单个技能(如 npx skills@latest update expo-router);遇到误导性输出可用 expo-skill-feedback 技能直接反馈给 Expo 团队。团队内部最好对齐同一套技能版本,避免智能体输出风格漂移。技能抬的是知识下限,架构决策仍要人把关。
7、总结
expo/skills 把 Expo 的平台知识拆成"入口路由 + 领域技能 + 参考文档"三层,再用 MCP 打通现场数据,是移动生态完成度最高的官方技能集之一。移动端智能体编程的瓶颈从来不是模型智力,而是平台知识的时效性,这套仓库恰好补在点上。对用智能体做 React Native 开发的团队,建议先装 expo-overview 体验路由式分发,再用 expo-web-to-native 把一个 Web 项目迁上双端——一个下午的投入,换来一条可复用的自动化迁移流水线。


