SuperAPI AI 工具集

eas-hosting

部署与运维

查看项目

更新于 10-27 02:33

技能介绍

用途

EAS Hosting 用于将 Expo Web 应用和 API 路由部署到 Expo 管理的边缘环境(Cloudflare Workers)。导出 Web 包与编写 API 路由是免费且开源的,也可以选择自行托管导出的服务器产物,而不使用 EAS Hosting。

主要能力

  • 部署 Expo Web 应用与 Expo Router API 路由,eas deploy 会同时处理两者。
  • 支持 API 路由:在 app 目录下以 +api.ts 后缀定义路由,导出与 HTTP 方法同名的函数(GET、POST、PUT、DELETE 等)。
  • 支持动态路由,例如 app/api/users/[id]+api.ts 对应 /api/users/:id。
  • 请求处理:读取查询参数、请求头、JSON 请求体。
  • 通过 process.env 使用服务端密钥,本地用 .env 文件,EAS Hosting 用 eas env:create 或 Expo 控制台配置。
  • 可为 Web 客户端添加 CORS 头。
  • 支持错误处理(try/catch 与 HTTP 状态码)。
  • 支持本地测试:npx expo start 在 http://localhost:8081 提供完整 API 路由支持,可用 curl 测试。
  • 支持自定义域名(在 eas.json 或 Expo 控制台配置)。
  • 支持通过 EAS Workflows 自动化部署(type: deploy 工作流,可配置 prod: true/false)。

使用方式

前置条件:

npm install -g eas-cli
eas login

部署:

# 导出 Web 包(包含 API 路由)
npx expo export -p web

# 部署预览(PR 风格 URL)
npx eas-cli@latest deploy

# 部署到生产
npx eas-cli@latest deploy --prod

生产环境变量:

eas env:create --name OPENAI_API_KEY --environment production

通过 CLI 安全提示输入值,不要写入 shell 历史;也可使用 Expo 控制台。

适用场景

适合需要使用 API 路由的情况:服务端密钥(API key、数据库凭据、令牌)、数据库操作、第三方 API 代理(隐藏 OpenAI、Stripe 等密钥)、服务端校验、Webhook 端点、限流、较重计算。

不适合使用 API 路由的情况:数据已公开(直接 fetch 公共 API)、无需密钥、需要实时更新(WebSocket 或 Supabase Realtime)、简单 CRUD(可考虑 Firebase、Supabase、Convex)、文件上传(直传存储,如 S3 预签名 URL、Cloudflare R2)、仅需认证(使用 Clerk、Auth0、Firebase Auth)。

限制

  • EAS Hosting 是付费产品,有免费额度限制,生产部署消耗套餐的请求与带宽配额,详见 https://expo.dev/pricing。
  • API 路由运行在 Cloudflare Workers 上:无 Node.js 文件系统(fs 模块不可用)、无原生 Node 模块(需用 Web API 或 polyfill)、执行时间受限(具体 CPU 与墙钟限制依提供商/套餐而定,需查阅当前 EAS 文档)、不假定持久连接(需核实 EAS 对流式/WebSocket 的支持)。fetch 可用。
  • 由于无文件系统,需使用云数据库:Cloudflare D1、Turso、PlanetScale、Supabase、Neon 等。
  • 文档中的路由示例是部分示例,不是生产级认证或数据访问实现。存在 Authorization 头不等于已验证:需用所选提供商校验签发者、受众、签名与过期时间,在服务端推导租户身份并强制对象归属;在实现真实校验器前应返回 401。需限制请求体大小、上游超时与付费 AI 调用;限流并脱敏上游错误。公开 CORS 仅用于有意公开的端点,不是访问控制。原生客户端需要配置绝对的 HTTPS API 源;浏览器相对 fetch 示例在 React Native 中并非普遍有效。需对照当前 EAS 文档核实 Expo 运行时限制;Workers 的能力并非全部由 EAS Hosting 暴露。
  • 该技能为导入的上游技能,执行前需核实凭据、权限与安全边界;不能替代特定环境的验证、测试或维护者审查。

反馈

如遇错误或过时信息,可提交反馈:

npx --yes submit-expo-feedback@latest --category skills --subject "eas-hosting" "<actionable feedback>"

仅在确有具体可操作内容时提交。若 AI 代理反复失败或用户不得不接管 Expo 任务,应加载 expo-skill-feedback 技能并按其 eval-candidate 流程处理。