Cumbre de Colaboradores Principales de React Native 2022
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
¡Tras años de pandemia y eventos exclusivamente en línea, realmente sentimos que era momento de reunir a los Colaboradores Principales de React Native!
Por eso, a principios de septiembre, reunimos a algunos de los colaboradores principales activos de React Native, mantenedores de bibliotecas y los equipos de React Native y Metro de Meta en la Cumbre de Colaboradores Principales 2022. Callstack albergó la cumbre en su sede central de Wrocław, Polonia, como parte de la conferencia React Native EU que se celebraba simultáneamente.
Junto con el equipo central de React Native, diseñamos una serie de talleres en los que los asistentes podían participar. Los temas fueron:
-
React Native Codegen y Soporte para TypeScript
-
Migración de Bibliotecas a la Nueva Arquitectura de React Native
-
Monorepositorio de React Native
-
Alineación de Metro con la Web y el Ecosistema
-
Flujo de Lanzamiento Simplificado de Metro
Nos impresionó la cantidad de intercambio de conocimientos y colaboración durante esos dos días. En esta publicación, queremos ofrecerte un adelanto de los resultados de este encuentro.
React Native Codegen y Soporte para TypeScript
Codegen de React Native es un componente fundamental de la Nueva Arquitectura de React Native. Dar soporte y mejorarlo está entre nuestras máximas prioridades para el futuro de React Native. Por ejemplo, a principios de este año añadimos compatibilidad con código genérico basado en especificaciones TypeScript en lugar de Flow.
En esta sesión, aprovechamos para incorporar nuevos colaboradores a Codegen, explicando su concepto central y funcionamiento. Luego nos enfocamos en dos áreas principales:
1. Compatibilidad con nuevos tipos que actualmente no son compatibles con Codegen. Uno de los más solicitados fue los tipos unión de cadenas en TypeScript.
Un pequeño equipo se reunió en una sala para abordar esta tarea. Encontraron y superaron dificultades como ejecutar pruebas unitarias para Codegen. Invieron tiempo considerable entendiendo el flujo de ejecución antes de abordar el código. Tras horas de trabajo colaborativo, obtuvieron un primer prototipo capaz de reconocer uniones de cadenas. Esta experiencia fue invaluable para discutir patrones de diseño y la arquitectura ideal que podríamos implementar.
2. Mejora del auto-linking para iOS, que carecía de un caso de uso.
Específicamente, el auto-linking fallaba cuando bibliotecas y aplicaciones coexistían en un monorepositorio. Android ya admitía este caso pero faltaba implementación para iOS.
Trabajar con los colaboradores nos hizo ver que la base de código de Codegen no es trivial. Por ejemplo, añadir soporte para un tipo requería copiar-pegar el mismo código en cuatro lugares: módulos con especificaciones Flow, módulos con TypeScript, componentes con Flow y componentes con TypeScript.
Esta reflexión nos impulsó a crear una tarea paraguas para solicitar ayuda comunitaria y mejorar la base de código hacia un estado más mantenible.
La participación fue excepcional: asignamos las primeras 40 tareas en 5 días. Para finales de octubre, la comunidad completó 47 tareas con muchas más listas para fusionar.
¡Esta iniciativa también contribuyó al Hacktoberfest para todos los que participaron en estas mejoras!
Migración de Bibliotecas a la Nueva Arquitectura de React Native
El tema candente en React Native es la Nueva Arquitectura. Contar con bibliotecas que la soporten es crucial para la migración de todo el ecosistema. Por ello, queremos ayudar a los mantenedores de bibliotecas en esta transición.
Inicialmente, esta sesión comenzó como una lluvia de ideas donde los contribuidores principales pudieron plantear todas sus dudas sobre la Nueva Arquitectura al equipo de React Native. Este intercambio presencial fue crucial tanto para aclarar conceptos como para recopilar feedback. Parte de estos comentarios se implementarán en React Native 0.71.
Luego pasamos a migrar prácticamente tantas bibliotecas como fuera posible. Durante la sesión, iniciamos la migración de varios paquetes comunitarios como react-native-document-picker, react-native-store-review y react-native-orientation.
Recordatorio: si estás migrando una biblioteca y necesitas soporte, contacta a nuestro Grupo de Trabajo de Nueva Arquitectura en GitHub.
Monorepo de React Native
Publicar una nueva versión de React Native actualmente no es trivial. Al ser uno de los paquetes más descargados en NPM, necesitamos garantizar un proceso de lanzamiento fluido.
Por eso queremos refactorizar el repositorio react-native implementando la RFC de Monorepo (#480).
En esta sesión, primero recopilamos opiniones de todos los contribuidores, pues es vital evolucionar nuestro repositorio minimizando cambios disruptivos para dependencias descendentes.
Trabajamos en dos frentes: expandimos nuestra infraestructura de CI para soportar el monorepo añadiendo Verdaccio, y comenzamos a renombrar/agregar ámbitos a varios paquetes, resultando en 6 contribuciones distintas.
Puedes seguir el progreso en este issue paraguas y esperamos compartir más avances pronto.
Metro Web y Alineación con el Ecosistema
Metro, nuestro empaquetador JavaScript, es fundamental para la experiencia de desarrollo en React Native. Buscamos que funcione con los últimos estándares del ecosistema JS.
El foco fue mejorar Metro para casos de uso web y alineación con el ecosistema npm/bundlers. Dos áreas clave:
1. Adoptar la especificación "exports" (puntos de entrada de paquetes)
De la documentación de Node.js:
Adoptar "exports" tiene gran potencial. Debatimos cómo manejar Código Específico de Plataforma con "exports". Considerando múltiples factores, diseñamos un plan de implementación no disruptivo para "exports" añadiendo modos "strict" y "non-strict" al resolvedor de Metro. Discutimos cómo builder-bob ayudaría a adoptar el modo estricto sin fricciones.
Esta discusión resultó en:
-
Un RFC para Metro sobre cómo funcionarían las exportaciones de paquetes con React Native.
-
Un RFC para Node.js para incluir "react-native" como una Condición de la Comunidad.
2. Ecosistema web y de empaquetadores
El equipo de Metro compartió avances de su colaboración con Expo y la intención de mantener este modelo de trabajo para próximas funcionalidades como bundle splitting y tree-shaking. Retomamos el soporte para módulos ES y consideramos futuras características como Yarn PnP y optimización de salida web. Discutimos cómo el núcleo de Metro comparte lógica y estructuras de datos con Jest, identificando oportunidades para mayor reutilización.
Los desarrolladores presentaron casos de uso valiosos para bundle splitting e interoperabilidad con herramientas de terceros. Esto nos llevó a discutir puntos de extensión potenciales en Metro y mejoras a la documentación actual.
Esta discusión sentó bases sólidas para la sesión del día siguiente sobre simplificación del flujo de lanzamientos.
Flujo de Lanzamientos Simplificado de Metro
Como mencionamos anteriormente, publicar React Native no es trivial.
La complejidad aumenta al necesitar lanzar React Native, la CLI de React Native y Metro simultáneamente. Estas herramientas están interconectadas pues tanto React Native como la CLI dependen de Metro, generando fricciones cuando cualquier paquete publica una nueva versión.
Actualmente gestionamos esto mediante comunicación directa y lanzamientos sincronizados, pero hay margen de mejora.
En esta sesión, reevaluamos las dependencias entre React Native, Metro y la CLI. Descubrimos que decisiones de diseño durante la iniciativa "Lean Core" -al extraer la CLI de React Native- crearon codependencia entre proyectos con funcionalidades duplicadas. Aquellas decisiones fueron acertadas en su momento y permitieron a la CLI iterar más rápido que nunca.
Era momento de reevaluarlas usando la experiencia de ambos equipos para definir el camino a seguir. Como resultado, el equipo de Metro asumirá el desarrollo de @react-native-community/cli-plugin-metro, trasladándolo temporalmente al núcleo de React Native y luego probablemente al monorepo de Metro.

El principal aprendizaje, además de tres horas dibujando dependencias en la pizarra, fue el intercambio de problemas, experiencias y planes entre los equipos de CLI y Metro, resultando en una mejor comprensión mutua.
No habríamos alcanzado este nivel de cooperación sin reunirnos presencialmente.
Seguimos impresionados por cómo varias horas de trabajo conjunto durante dos días generaron tanto intercambio de conocimientos y polinización cruzada de ideas. En esta cumbre plantamos semillas para iniciativas que mejorarán y remodelarán el ecosistema de React Native.
Agradecemos nuevamente a Callstack por hospedarnos y a todos los participantes de la Cumbre de Colaboradores Principales de React Native 2022.
Si te interesa unirte al desarrollo de React Native, participa en nuestras iniciativas abiertas y lee la guía de contribución en nuestro sitio. ¡Esperamos conocerte en persona en el futuro!

