Guía de migración
Esta guía cubre el proceso de migración de componentes desde UI1 (decentraland-ui) a UI2 (decentraland-ui2).
Cuándo Migrar
Las migraciones pueden comenzar por tres razones válidas:
1. Mejora técnica
Deseas migrar un componente por:
Mejor soporte de theming
Mejores tipos de TypeScript
Consistencia con otros componentes de UI2
Optimización de rendimiento
Mejoras de accesibilidad
2. Actualización de un Componente
Un componente de UI1 necesita ser actualizado
Aún no existe un equivalente en UI2
Requisito: Créalo primero en UI2, luego úsalo
3. Necesidades del Proyecto
El componente será usado en un proyecto nuevo o existente
Hay tiempo disponible para migrarlo correctamente
Los recursos del proyecto permiten una migración exhaustiva
No migres componentes “solo porque.” Cada migración debe tener una justificación comercial o técnica clara.
Proceso de Migración
Paso 1: Planificación
Antes de iniciar la migración:
Identificar dependencias
¿Qué otros componentes utiliza?
¿Qué proyectos lo usan actualmente?
¿Hay cambios incompatibles planificados?
Revisar uso actual
¿Cuántos proyectos usan este componente?
¿Qué props se usan con mayor frecuencia?
¿Hay problemas conocidos?
Definir alcance
¿Será esta una migración 1:1?
¿Hay mejoras planificadas?
¿Cuál es el cronograma?
Paso 2: Crear Componente UI2
Sigue la Componentes personalizados guía para componentes candidatos de UI2.
Requisitos:
Usar sintaxis de objeto para styled-components
Usar solo valores del theme (no valores arbitrarios)
Agregar historias completas en Storybook
Escribir pruebas completas
Documentar todas las props y comportamientos
Estructura de ejemplo:
Paso 3: Mantener Compatibilidad
El componente UI2 DEBE debe exponer las mismas props y comportamientos que la versión UI1.
Mismas Props
Cambios Compatibles hacia Atrás
Si necesitas cambiar o agregar props:
Primero, agrega las nuevas props a UI1 como opcionales
Luego, migra a los consumidores de UI1 para usar las nuevas props
Finalmente, crea el componente UI2 con la nueva API
Paso 4: Deprecar el Componente UI1
Agregar un aviso de deprecación al componente UI1:
Paso 5: Adopción Gradual
No fuerces la migración inmediata. Permite una adopción gradual:
Publicar componente UI2
Documentar ruta de migración
Actualizar proyectos nuevos para usar UI2
Migrar proyectos existentes de forma oportunista
Planificar eventual eliminación de UI1 (con aviso)
Ejemplos de Migración
Ejemplo 1: Componente Simple
Migrando un básico Card componente:
Versión UI1
Versión UI2
Ejemplo 2: Componente con Variantes
Migrando un Button con variantes:
Versión UI1
Versión UI2
Lista de Verificación de Migración
Usa esta lista de verificación para cada migración de componente:
Fase de Planificación
Fase de Implementación
Fase de Deprecación
Fase de Adopción
Patrones Comunes de Migración
De CSS a Styled Components
Nombres de Clase a Props
Valores Fijos al Theme
Cambios Incompatibles
A veces los cambios incompatibles son necesarios. Manéjalos con cuidado:
Cuando los Cambios Incompatibles son Aceptables
Correcciones de seguridad
Bugs críticos
Actualizaciones de versión mayor
Eliminar características obsoletas (con aviso)
Cómo Manejar Cambios Incompatibles
Anunciar con anticipación - Comunicar los cambios con suficiente antelación
Proporcionar ruta de migración - Documentar cómo actualizar
Incremento de versión - Seguir versionado semántico
Periodo de deprecación - Dar tiempo para migrar
Codemods - Proveer herramientas de migración automatizadas si es posible
Ejemplo: Eliminar Props Obsoletas
Pruebas de Migración
Asegúrate de que los componentes migrados funcionen correctamente:
Pruebas de Regresión Visual
Comparar los componentes UI1 y UI2 visualmente:
Pruebas de Comportamiento
Asegurar que las props funcionen de la misma manera:
Actualizaciones de Documentación
Después de la migración, actualiza la documentación:
Actualizar Docs del Componente UI1
Crear Docs del Componente UI2
Siguientes pasos
Revisar Componentes personalizados para crear componentes UI2
Ver Estilado y Theming para estándares de estilado
Comprobar Resumen del proceso para el flujo de trabajo completo
Última actualización