Concepto clave
La instalación y configuración del entorno de desarrollo para React Native con Expo es el primer paso crítico para construir aplicaciones móviles nativas. Imagina que estás preparando un taller de carpintería: necesitas herramientas específicas (como sierras y martillos), un espacio organizado (tu banco de trabajo), y materiales de calidad (la madera). De manera similar, para desarrollar apps con React Native y Expo, necesitas instalar Node.js como base, Expo CLI como herramienta principal, y configurar tu editor de código (como VS Code) para optimizar el flujo de trabajo. Este entorno te permite escribir código una vez y ejecutarlo en dispositivos iOS y Android, aprovechando las capacidades nativas sin la complejidad de configurar Xcode o Android Studio desde el inicio.
Expo actúa como una capa de abstracción que simplifica el desarrollo, proporcionando un conjunto de herramientas y servicios preconfigurados. En lugar de lidiar directamente con las configuraciones nativas de cada plataforma, Expo maneja la compilación, el empaquetado y la ejecución, permitiéndote enfocarte en la lógica de tu aplicación. Es como usar un kit de construcción pre-diseñado en lugar de fabricar cada pieza desde cero. Para un desarrollador intermedio, entender esta configuración es esencial porque establece las bases para un desarrollo eficiente y libre de errores comunes relacionados con el entorno.
Cómo funciona en la práctica
Vamos a configurar el entorno paso a paso, asegurándonos de que todo esté listo para crear tu primera app. Sigue estos pasos en orden:
- Verifica Node.js: Abre tu terminal y ejecuta
node -v. Debes tener Node.js versión 18 o superior. Si no lo tienes, descárgalo desde nodejs.org e instálalo. Node.js es el motor que ejecuta JavaScript fuera del navegador, necesario para React Native. - Instala Expo CLI: En la terminal, ejecuta
npm install -g expo-cli. Esto instala globalmente la interfaz de línea de comandos de Expo, que te permitirá crear y gestionar proyectos. Verifica la instalación conexpo --version. - Configura tu editor: Si usas VS Code, instala las extensiones "React Native Tools" y "Expo Tools" desde el marketplace. Estas extensiones proporcionan autocompletado, depuración y soporte para Expo, mejorando tu productividad.
- Crea un proyecto de prueba: Ejecuta
expo init MiPrimeraApp, selecciona el template "blank" y espera a que se descarguen las dependencias. Esto genera una estructura básica de proyecto con todo configurado. - Ejecuta la app: Navega a la carpeta del proyecto con
cd MiPrimeraAppy ejecutaexpo start. Esto inicia el servidor de desarrollo y abre una interfaz en tu navegador. Escanea el código QR con la app Expo Go en tu dispositivo móvil para ver la app en tiempo real.
Código en acción
Una vez configurado el entorno, vamos a modificar el código inicial para personalizar la app. Abre el archivo App.js en tu proyecto y observa el contenido predeterminado. Aquí tienes un ejemplo funcional que cambia el mensaje y añade un estilo básico:
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
export default function App() {
return (
¡Hola, Desarrollador!
Tu entorno está listo para construir apps nativas.
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#f0f0f0',
alignItems: 'center',
justifyContent: 'center',
},
title: {
fontSize: 24,
fontWeight: 'bold',
color: '#333',
marginBottom: 10,
},
subtitle: {
fontSize: 16,
color: '#666',
textAlign: 'center',
},
});Ahora, mejoremos este código refactorizando para hacerlo más modular. Crea un nuevo archivo llamado components/Greeting.js y mueve la lógica del saludo allí:
// components/Greeting.js
import { Text, StyleSheet } from 'react-native';
export default function Greeting({ name }) {
return (
¡Bienvenido, {name}!
);
}
const styles = StyleSheet.create({
greeting: {
fontSize: 22,
color: '#2a9d8f',
fontWeight: '600',
},
});Luego, actualiza App.js para usar este componente:
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, View } from 'react-native';
import Greeting from './components/Greeting';
export default function App() {
return (
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#f8f9fa',
alignItems: 'center',
justifyContent: 'center',
},
});Este cambio demuestra cómo estructurar tu código para escalabilidad, separando responsabilidades.
Errores comunes
- Error 1: Versión desactualizada de Node.js. Si usas una versión antigua de Node.js (como la 14 o inferior), Expo puede fallar al instalar dependencias. Solución: Actualiza a Node.js 18 o superior usando un gestor como nvm (Node Version Manager) o descargando la última versión desde nodejs.org.
- Error 2: Permisos insuficientes en la instalación global. Al ejecutar
npm install -g expo-clien sistemas Unix (macOS/Linux), puedes encontrar errores de permisos. Solución: Usasudo npm install -g expo-clio configura npm para instalar globalmente sin sudo (recomendado para seguridad). - Error 3: Conflicto de puertos. Expo inicia un servidor en el puerto 19000 por defecto. Si otro servicio está usando ese puerto, verás errores de conexión. Solución: Cierra otras aplicaciones que usen el puerto o cambia el puerto de Expo con
expo start --port 19001. - Error 4: No tener Expo Go instalado en el dispositivo móvil. Para probar la app en un dispositivo físico, necesitas la app Expo Go (disponible en App Store o Google Play). Sin ella, no podrás escanear el código QR. Solución: Descarga Expo Go antes de iniciar el proyecto.
- Error 5: Olvidar instalar dependencias después de clonar un proyecto. Si clonas un proyecto existente desde Git, las dependencias no se incluyen. Ejecutar
expo startfallará. Solución: Siempre ejecutanpm installoyarn installen la carpeta del proyecto primero.
Checklist de dominio
- Node.js versión 18 o superior instalada y verificada con
node -v. - Expo CLI instalada globalmente y funcionando (comprobado con
expo --version). - Editor de código configurado con extensiones para React Native y Expo (ej., VS Code con React Native Tools).
- Proyecto de Expo creado exitosamente usando
expo inity ejecutado conexpo start. - App Expo Go instalada en un dispositivo móvil y capaz de cargar el proyecto escaneando el código QR.
- Capacidad de modificar el código en
App.jsy ver los cambios en tiempo real en el dispositivo. - Entendimiento de cómo solucionar errores comunes como conflictos de puertos o permisos.
Configura un entorno de desarrollo y crea una app de lista de tareas básica
Sigue estos pasos para aplicar lo aprendido y construir una app funcional desde cero:
- Prepara el entorno: Asegúrate de tener Node.js 18+ y Expo CLI instalados. Si ya los tienes, verifica que funcionen correctamente.
- Crea un nuevo proyecto: Abre tu terminal y ejecuta
expo init ListaDeTareas. Selecciona el template "blank" y espera a que se complete la instalación. - Configura la estructura: Dentro del proyecto, crea una carpeta llamada
componentsy un archivoTaskItem.jsdentro de ella. Este componente mostrará una tarea individual. - Implementa el componente TaskItem: En
TaskItem.js, crea un componente que acepte props comotitleycompleted, y muestre un texto con un estilo que cambie si la tarea está completada (ej., tachado). UsaStyleSheetpara los estilos. - Modifica App.js: En
App.js, importaTaskItemy crea un array de tareas de ejemplo (ej., [{ title: "Aprender React Native", completed: false }, { title: "Configurar Expo", completed: true }]). Renderiza cada tarea usandoTaskItemdentro de una lista. - Prueba la app: Ejecuta
expo starten la terminal, escanea el código QR con Expo Go en tu dispositivo, y verifica que las tareas se muestren correctamente, con las completadas tachadas. - Documenta los pasos: Crea un archivo
README.mden la raíz del proyecto con instrucciones breves sobre cómo ejecutar la app y qué hace cada componente.
Al final, deberías tener una app ejecutándose que muestre una lista de tareas con estado visual.
Pistas- Usa
mapen JavaScript para iterar sobre el array de tareas en App.js y renderizar múltiples componentes TaskItem. - En TaskItem.js, puedes usar la prop
stylecondicionalmente: por ejemplo,textDecorationLine: completed ? 'line-through' : 'none'para tachar el texto. - Si encuentras errores al importar TaskItem, verifica la ruta en el import: debe ser
import TaskItem from './components/TaskItem'en App.js.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.