10 ejemplos para entender cómo elegimos, fijamos y descontinuamos dependencias en mobile - 7 básicos e intermedios. Estos son los valores predeterminados del equipo para aplicaciones Expo SDK 57; hay libros de cocina más profundos para cada biblioteca en esta sección.
Comienza desde un proyecto con SDK 57 fijo. Las bibliotecas esenciales son valores predeterminados seleccionados - no todo paquete npm que resuelve un problema pertenece a una aplicación de envío.
Herramientas: Estos ejemplos apuntan a Expo SDK 57 (expo ~57.0.4), React Native 0.86.0 y React 19.2.3. Los módulos nativos requieren una compilación de desarrollo o compilación EAS - no solo Expo Go de serie cuando el paquete incluye código nativo personalizado.
Las decisiones de dependencias móviles comienzan con qué tipo de estado o E/S necesitas - no repositorios de tendencias.
┌────────────────────┬─────────────────────────┬──────────────────────────┐│ Problema │ Biblioteca predeterminada│ No usar para │├────────────────────┼─────────────────────────┼──────────────────────────┤│ Caché API/servidor │ @tanstack/react-query │ Insignia de carrito, toggle de tema ││ UI global del cliente│ zustand │ Filas del catálogo de productos ││ KV local rápido │ react-native-mmkv │ Datos offline relacionales ││ Listas largas │ @shopify/flash-list │ Pantalla de configuración de 8 filas ││ Gestos / movimiento│ Reanimated 4 + RNGH │ Desvanecimiento de 200ms de una sola vez ││ Reporte de fallos │ @sentry/react-native │ Console.log en prod │└────────────────────┴─────────────────────────┴──────────────────────────┘
Una biblioteca por clase de problema - dos bibliotecas de listas o dos almacenes globales crean deuda de migración
Prefiere paquetes primero con Expo - npx expo install resuelve versiones; menos sorpresas de compilación nativa
Documenta excepciones en un ADR - no en un hilo de Slack que nadie encuentra durante la incorporación
Expo mantiene una matriz de compatibilidad por SDK. Fijar manualmente react-native-reanimated@latest rompe compilaciones EAS cuando el ABI nativo no coincide con RN 0.86.
# Correcto - resuelve la versión compatible con SDK 57npx expo install react-native-reanimated react-native-gesture-handler# Arriesgado para módulos nativos - puede instalar semver incompatiblenpm install react-native-reanimated
# Verifica después de cualquier cambio de dependencianpx expo-doctor
npx expo install escribe el rango fijado con tilde que Expo probó contra tu SDK
Paquetes solo JS (zod, @tanstack/react-query, zustand) pueden usar npm install - sin bridge nativo
Ejecuta expo-doctor en lanzamiento e integración continua nocturna - detecta desajuste antes de eas build
Confirma cambios de lockfile con el PR de dependencia - instalaciones reproducibles en EAS
Cada biblioteca con código nativo trae autolinking, config plugins y tamaño binario de almacenamiento. Lee los documentos de instalación antes de fusionar.
# Después de agregar una biblioteca candidatanpx expo install react-native-mmkvnpx expo prebuild --dry-run # surfaces config plugin changesnpx expo-doctor
Lista de verificación antes de fusionar:
Pregunta
Pasar
Fallar - diferir o encontrar alternativa
¿Funciona en el flujo de trabajo administrado de Expo?
Sí
Requiere bifurcación simple
¿Necesita config plugin en app.config?
Documentado
Diferencia nativa sorpresiva
¿Requiere reconstrucción de cliente de desarrollo?
Planeado en sprint
Bloqueado en QA solo de Expo Go
¿Duplica biblioteca existente?
Sin superposición
Consolidar primero
MMKV, FlashList, Sentry, Reanimated todos requieren una compilación de desarrollo o binario EAS - planifica el tiempo de reconstrucción
expo prebuild --dry-run obtiene una vista previa de cambios de proyecto nativos sin escribir ios/ / android/
Cuenta módulos nativos totales - cada uno es un elemento de reconciliación de actualización del SDK
Los pins nativos de lista/almacenamiento (@shopify/flash-list, react-native-mmkv, @react-native-community/netinfo) se escriben por npx expo install - no edites manualmente esos rangos.
No toda aplicación necesita react-native-mmkv desde el primer día. Comienza con AsyncStorage; actualiza cuando la generación de perfiles prueba que las lecturas sincrónicas importan.
Orden de elección de almacenamiento:1. Estado React en memoria / Caché de Query → efímero2. @react-native-async-storage/async-storage → JSON pequeño, hidratación de arranque3. react-native-mmkv → lecturas sincrónicas de ruta activa cada fotograma4. expo-sqlite → filas relacionales, migraciones, consultas5. expo-secure-store → tokens, secretos
npx expo install @react-native-async-storage/async-storage# Agrega MMKV solo después de que React DevTools Profiler muestre espera de almacenamiento en ruta críticanpx expo install react-native-mmkv
AsyncStorage es asincrónico - await getItem en cada renderizado causa tartamudez
MMKV es sincrónico - ideal para persistencia de Zustand y banderas de características que se leen en cada montaje
MMKV no es una base de datos - sin SQL, sin joins; usa SQLite para datos relacionales offline
MMKV requiere una compilación de desarrollo - no disponible en Expo Go de serie
@shopify/flash-list es una mejora de rendimiento - no un requisito del primer día para cada pantalla.
// Lista de configuración corta - FlatList está bienimport { FlatList } from "react-native";// Feed pesado en imágenes con tartamudez de desplazamiento en Android - migraimport { FlashList } from "@shopify/flash-list";
Lista de verificación de desencadenante de migración:
Profiler muestra caídas de fotogramas durante desplazamiento rápido en un dispositivo Android de gama media
La lista tiene 50+ filas con imágenes o contenido variable
Ajuste windowSize en FlatList no solucionó destellos en blanco
npx expo install @shopify/flash-list
No migres cadaFlatList de manera preventiva - la estimación de ajuste tiene un costo
La descontinuación es una eliminación planeada - no dejar que un paquete se pudra en package.json hasta que la actualización explote.
# 1. Confirma importaciones ceronpx knipnpx depcheck# 2. Elimina paquete y entrada de lockfilenpm uninstall legacy-state-library# 3. Elimina config plugin nativo de app.config.ts si está presente# 4. Reconstruye cliente de desarrollo - autolinking debe soltar el módulo nativoeas build --profile development --platform all# 5. Verifica en el dispositivonpx expo-doctor
// app.config.ts - elimina estancia de plugin al descontinuarexport default { plugins: [ // ["legacy-library-expo-plugin"], ← delete "expo-router", ],};
Descontinúa en un PR dedicado - más fácil de bisectar que agrupado con una característica
Ejecuta knip antes de la eliminación - archivos huérfanos a menudo ocultan la última importación
Reconstruye nativo después de eliminar cualquier paquete con código nativo - clientes de desarrollo obsoletos se bloquean misteriosamente
Documenta por qué se eliminó en la descripción del PR - evita la reintroducción el próximo trimestre
Estandariza preguntas de revisión para que cada biblioteca nueva obtenga el mismo nivel de escrutinio.
## PR de dependencia: @shopify/flash-list- [ ] Clase de problema documentada (rendimiento de lista - pantalla de feed)- [ ] Instalado con `npx expo install`- [ ] `npx expo-doctor` limpio- [ ] Reconstrucción nativa programada / completada- [ ] Sin biblioteca duplicada (FlatList permanece para configuración)- [ ] Impacto de bundle anotado (tamaño de fuente + nativo)- [ ] Plan de prueba en dispositivo Android físico- [ ] ADR actualizado si esto cambia el valor predeterminado del equipo
# .github/workflows/pr-checks.yml - agregar en PRs etiquetados con dependencias- name: Expo doctor if: contains(github.event.pull_request.labels.*.name, 'dependencies') run: npx expo-doctor
Etiqueta PRs de dependencia dependencies - desencadena pasos de CI adicionales
Bloquea fusión si expo-doctor falla - desajuste de versiones es más barato de arreglar en PR que en cola EAS
Requiere nota de prueba de dispositivo para módulos nativos - simuladores pierden fallas de autolinking
Vincula al libro de cocina en esta sección al adoptar una biblioteca estándar
¿Qué bibliotecas hay en la sección Bibliotecas esenciales?
TanStack Query, Zustand, MMKV, FlashList, Reanimated + Gesture Handler y Sentry - el stack de producción predeterminado para aplicaciones Expo SDK 57 en este sitio de documentación.
¿Puedo usar npm install para @tanstack/react-query?
Sí - es solo JS sin módulo nativo de Expo. Aún fija un rango semver y confirma el lockfile. Para cualquier paquete que Expo documenta en la referencia del SDK, prefiere npx expo install.
¿Cuántos almacenes globales debo tener?
Un almacén de Zustand por dominio (carrito, preferencias, incorporación) - no un mega-almacén. Ver zustand.
¿Cuándo necesito una nueva compilación EAS después de agregar una biblioteca?
Siempre que el paquete agregue código nativo o un config plugin - MMKV, FlashList, Sentry, Reanimated. Los paquetes solo JS necesitan reinicio de Metro solamente.
¿Cómo justifico una biblioteca no predeterminada al equipo?
Escribe un ADR corto: problema, alternativas consideradas, costo nativo, plan de descontinuación. Vinculalo desde el PR de dependencia.