Guía rápida de create-expo-app
Genera un nuevo proyecto Expo con la plantilla correcta, una fijación explícita de SDK 57 y una verificación de paso para que tu equipo comience con React Native 0.86 - no con un SDK antiguo accidental.
Busca en todas las páginas de la documentación
Genera un nuevo proyecto Expo con la plantilla correcta, una fijación explícita de SDK 57 y una verificación de paso para que tu equipo comience con React Native 0.86 - no con un SDK antiguo accidental.
Tarjeta de referencia rápida - lista para copiar y pegar.
# Fija SDK 57 explícitamente (recomendado para nuevas apps de producción)
npx create-expo-app@latest MyApp --template default@sdk-57
cd MyApp
# Confirma la fijación del SDK antes de escribir funcionalidades
node -e "const p=require('./package.json'); console.log({expo:p.dependencies.expo, rn:p.dependencies['react-native']})"
npx expo-doctor
npx expo startCuándo usar esto:
default, tabs, blank o bare-minimum antes de que el repo crezca.create-expo-app@latest cambió su plantilla por defecto.#!/usr/bin/env bash
# scripts/scaffold-team-app.sh - proyecto SDK 57 reproducible para tu org
set -euo pipefail
APP_NAME="${1:-TeamMobile}"
TEMPLATE="${2:-default@sdk-57}" # tabs@sdk-57 | blank-typescript@sdk-57 | bare-minimum@sdk-57
npx create-expo-app@latest "$APP_NAME" \
--template "$TEMPLATE" \
--yes
cd "$APP_NAME"
# Lockfile + git desde el primer día
git init
git add .
git commit -m "chore: scaffold $APP_NAME ($TEMPLATE)"
# Verificaciones de cordura que todo repo nuevo debe pasar
npx expo-doctor
npx tsc --noEmit
echo "✅ $APP_NAME listo - ejecuta: cd $APP_NAME && npx expo start"Después de que el script termine, abre el proyecto y confirma las dependencias en package.json:
{
"dependencies": {
"expo": "~57.0.4",
"react": "19.2.3",
"react-native": "0.86.0"
},
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web"
}
}Lo que esto demuestra:
--template default@sdk-57 explícito para que el scaffold coincida con tu stack manifest, no con lo que @latest use como predeterminado durante una transición de SDK.--yes para creación de proyectos no interactiva compatible con CI.expo-doctor como primera puerta después del scaffold - detecta versiones de módulos nativos incompatibles temprano.create-expo-app descarga una plantilla versionada del monorepo de Expo, escribe package.json, instala dependencias y genera código fuente inicial (layout de Expo Router para default/tabs).@sdk-57 en un nombre de plantilla fija el SDK principal de Expo en el momento del scaffold - el package.json de la plantilla resuelve expo a ~57.0.4 y los pares react-native / react coincidentes.npx expo install <pkg> (usado más tarde) lee la versión de expo fijada e instala versiones de módulos nativos compatibles - pero solo si la fijación base de expo es correcta primero.expo-doctor compara tu grafo de dependencias contra la base de datos de compatibilidad de SDK 57 e indica desajustes antes de que surjan como errores oscuros de Metro o compilación nativa.| Plantilla | Incluye | Elige cuando |
|---|---|---|
default@sdk-57 | Expo Router, TypeScript, iniciador tab/stack, scripts recomendados | La mayoría de nuevas apps - el estándar del equipo |
tabs@sdk-57 | Iniciador centrado en enrutamiento basado en archivos (similar a default) | Quieres estructura centrada en routing sin boilerplate extra |
blank@sdk-57 / blank-typescript@sdk-57 | JS/TS mínimo, sin navegación conectada | Spikes de biblioteca, experimentos brownfield, enseñanza de primitivos de RN |
bare-minimum@sdk-57 | Vacío + android/ e ios/ vía npx expo prebuild | Necesitas directorios nativos inmediatamente (código nativo personalizado desde el primer día) |
# Ejemplos - siempre incluye el sufijo de SDK para nuevo trabajo de SDK 57
npx create-expo-app@latest Shop --template tabs@sdk-57
npx create-expo-app@latest Spike --template blank-typescript@sdk-57
npx create-expo-app@latest NativeDay1 --template bare-minimum@sdk-57| Verificación | Comando / ubicación | Esperado para SDK 57 |
|---|---|---|
versión del paquete expo | package.json → dependencies.expo | ~57.0.4 |
| par React Native | package.json → dependencies.react-native | 0.86.0 |
| par React | package.json → dependencies.react | 19.2.3 |
| aprobación del doctor | npx expo-doctor | Sin errores (avisos revisados) |
| config resuelto | npx expo config --type public | sdkVersion / plugins alineados con 57 |
| Bandera | Efecto |
|---|---|
--template <name>@sdk-57 | Selecciona iniciador + SDK principal |
--yes | Acepta valores predeterminados (nombre de carpeta, instalar deps) |
--no-install | Omite npm install / CocoaPods - útil en CI que instala por separado |
--example <name> | Clona un ejemplo de expo/examples en lugar de una plantilla core |
--no-agents-md | Omite archivos de contexto del agente AI (AGENTS.md, etc.) |
// App.tsx - entrada de plantilla blank-typescript (sin Router)
import { StatusBar } from "expo-status-bar";
import { StyleSheet, Text, View } from "react-native";
export default function App() {
return (
<View style={styles.container}>
<Text>App SDK 57 iniciado.</Text>
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, alignItems: "center", justifyContent: "center" },
});La plantilla default@sdk-57 usa Expo Router (app/_layout.tsx) en su lugar - prefiere eso para apps multi-pantalla.
@sdk-57 - Durante la transición de SDK 57, npx create-expo-app@latest sin --template puede crear un proyecto SDK 54. Solución: Siempre pasa --template default@sdk-57 (o tu plantilla elegida con el sufijo de SDK).bare-minimum por defecto - Ejecuta prebuild inmediatamente, haciendo commit de android/ e ios/. Los equipos en managed workflow pierden la simplicidad de CNG. Solución: Comienza con default@sdk-57; ejecuta npx expo prebuild solo cuando se requieran directorios nativos.expo-doctor después del scaffold - Desajuste de versión (p. ej. expo-camera compilado para SDK 56) se compila pero falla en runtime. Solución: Ejecuta npx expo-doctor y npx expo install --fix antes del trabajo de funcionalidades.yarn install deja archivos de bloqueo duplicados y EAS puede elegir el incorrecto. Solución: Mantente con un gestor; elimina el otro archivo de bloqueo si estás migrando.slug - app.json / app.config slug se queda en el valor del scaffold; los deep links y URLs del proyecto de EAS se rompen. Solución: Actualiza slug, name e identificadores de paquete juntos en la config de app.node_modules u omitir el lockfile - Las instalaciones reproducibles fallan entre máquinas y EAS. Solución: Haz commit de package-lock.json / yarn.lock / pnpm-lock.yaml; mantén node_modules en gitignore.| Alternativa | Úsalo cuando | No lo uses cuando |
|---|---|---|
create-expo-app con plantilla @sdk-57 | Nuevas apps de Expo; el equipo quiere iniciadores oficiales | Estás añadiendo RN a una app nativa existente (brownfield) |
npx @react-native-community/cli init | RN puro sin herramientas de Expo | Quieres EAS, módulos de Expo y actualizaciones gestionadas |
expo/examples vía --example | Aprender una integración específica (Router, SQLite, etc.) | Scaffold de app de producción - los ejemplos son demos, no plantillas de producto |
| Generadores de monorepo (Nx, Turborepo) | Múltiples apps compartiendo paquetes | Una single app standalone - complejidad extra desde el principio |
| Forkear un repo de plantilla interna | Lint, CI y design tokens de toda la org integrados | Prototipos puntuales donde las plantillas oficiales son más rápidas |
create-expo-app es el generador de proyectos de Expo. Copia una plantilla versionada, instala dependencias y conecta scripts (expo start, objetivos de plataforma). Es la forma recomendada para iniciar proyectos SDK 57.
Durante el lanzamiento de SDK 57, create-expo-app@latest sin una plantilla aún puede generar SDK 54 para compatibilidad con Expo Go en dispositivos físicos. El nuevo trabajo de producción debe fijar @sdk-57 explícitamente para que package.json resuelva expo ~57.0.4.
default@sdk-57. Incluye Expo Router, TypeScript y los scripts estándar de Expo CLI. Usa blank-typescript@sdk-57 para spikes mínimos y bare-minimum@sdk-57 solo cuando necesites directorios nativos inmediatamente.
node -e "console.log(require('./package.json').dependencies.expo)"
npx expo-doctorEspera ~57.0.4 y un reporte de doctor limpio.
Valida que expo, react-native y los módulos de Expo instalados coincidan con la matriz de compatibilidad de SDK. Ejecútalo después de cada scaffold y después de añadir dependencias nativas.
Sí. Pasa --yes y el nombre de la app:
npx create-expo-app@latest MyApp --template default@sdk-57 --yesAmbas se dirigen a apps multi-pantalla con Expo Router y TypeScript. default es el iniciador de propósito general; tabs enfatiza la estructura de navegación con pestañas. Para la mayoría de equipos son intercambiables - elige una y estandariza.
Cuando necesites directorios android/ e ios/ desde el primer día - módulos nativos personalizados, CI existente que compila proyectos nativos, o integración brownfield. Si no, comienza gestionado y ejecuta npx expo prebuild más tarde.
Expo Go en la App Store rastrea un SDK a la vez. Un proyecto SDK 57 requiere una compilación de Expo Go compatible. En dispositivos iOS no puedes hacer sideload de versiones antiguas de Expo Go - usa un simulador, descarga una compilación coincidente de expo.dev/go, o crea una compilación de desarrollo.
cd MyApp
npx expo startPresiona i para iOS Simulator, a para emulador Android, o escanea el código QR con Expo Go / una compilación de desarrollo.
Todos son soportados. create-expo-app configura ajustes específicos del gestor de paquetes (p. ej. Yarn PnP nodeLinker: node-modules). Elige uno por repo y haz commit del lockfile coincidente - EAS lo detecta automáticamente.
Omite la instalación de dependencias de JavaScript (y CocoaPods para bare-minimum). Útil cuando CI ejecuta npm ci en un paso posterior con registros en caché.
Sí. --example with-router extrae de expo/examples. Los ejemplos enseñan características específicas; no son un sustituto para default@sdk-57 cuando quieres el iniciador de producción mantenido.
Siempre usa el instalador de Expo para que las versiones coincidan con SDK 57:
npx expo install expo-cameraNunca ejecutes npm install expo-camera@latest sin verificar compatibilidad.
Haz commit del código fuente, app.json / app.config, package.json, lockfile, tsconfig.json y assets. No hagas commit de node_modules, .expo/ o archivos .env*.local locales con secretos.
Versiones de stack: Esta página fue escrita para React 19.2.3, React Native 0.86.0 y Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última actualización: 16 jul 2026