Cómo construir una librería de componentes web
Arquitectura, frameworks, versionado y testing para una librería que escale con tu producto
Una librería de componentes es la materialización técnica de un sistema de diseño. Es donde los tokens y las decisiones de diseño se convierten en código reutilizable que los equipos de producto consumen directamente. Construirla bien es la diferencia entre acelerar el desarrollo o generar más deuda técnica.
Esta guía cubre las decisiones clave: qué tecnología usar, cómo estructurar la arquitectura, cómo versionar y publicar, cómo testear componentes de interfaz, y cómo documentarlos para que otros equipos los adopten sin fricción.
Arquitectura de una librería de componentes
La arquitectura determina cómo se organizan, construyen y distribuyen los componentes. Las dos aproximaciones principales son monorepo (todos los componentes en un solo repositorio con paquetes independientes) y single-package (un único paquete npm con todos los componentes).
El monorepo es la opción más escalable para equipos grandes. Herramientas como Turborepo, Nx o Lerna permiten gestionar dependencias entre paquetes, ejecutar builds incrementales y publicar versiones independientes. El single-package es más sencillo de mantener cuando el equipo es pequeño y la librería tiene menos de 30-40 componentes.
- Monorepo: escalable, versionado independiente por componente, builds incrementales
- Single-package: sencillo, menor overhead de configuración, ideal para equipos pequeños
- Estructura interna: cada componente en su carpeta con código, tests, stories y documentación
React, Vue, Web Components: ¿qué elegir?
La elección de tecnología depende del ecosistema de tu organización. Si todos tus productos usan React, construir la librería en React es la decisión más pragmática. Si tienes productos en múltiples frameworks, Web Components o una capa de abstracción como Mitosis merecen consideración.
Web Components ofrecen interoperabilidad nativa con cualquier framework, pero su ecosistema de testing y herramientas aún no es tan maduro como el de React. Lit (de Google) es el framework más popular para construir Web Components con una DX moderna. En la práctica, muchas organizaciones optan por React y proporcionan wrappers para otros frameworks cuando es necesario.
- React: ecosistema más maduro, mayor comunidad, mejor tooling (Storybook, Testing Library)
- Vue: excelente DX, single-file components, buena opción si tu stack es Vue
- Web Components: agnósticos de framework, estándar del navegador, curva de aprendizaje mayor
- Mitosis: compila a React, Vue, Angular, Svelte desde una sola fuente — interesante pero inmaduro
Versionado y publicación
El versionado semántico (semver) es imprescindible. Los consumidores de tu librería necesitan saber si una actualización es segura (patch), añade funcionalidad (minor) o rompe la API (major). Usa herramientas como Changesets o semantic-release para automatizar la generación de changelogs y la publicación a npm.
Publica en un registro npm privado si la librería es interna, o en npm público si es open source. Configura CI/CD para que cada merge a main genere automáticamente una nueva versión basada en los changesets acumulados. Esto elimina el proceso manual y reduce errores.
Testing de componentes de UI
Los componentes de interfaz requieren una estrategia de testing específica que combine tests unitarios, tests de interacción y tests visuales. No basta con testear la lógica: necesitas verificar que el componente se renderiza correctamente y que las interacciones del usuario funcionan como se espera.
- Unit tests: validan props, estados y lógica interna con Vitest o Jest + Testing Library
- Interaction tests: simulan clicks, inputs y navegación por teclado para verificar comportamiento
- Visual regression tests: comparan capturas de pantalla entre versiones para detectar cambios no intencionados (Chromatic, Percy, Playwright)
- Accessibility tests: validan cumplimiento WCAG con axe-core o pa11y integrados en CI
Documentación con Storybook
Storybook se ha convertido en el estándar para documentar y desarrollar componentes de forma aislada. Cada componente tiene una o más "stories" que muestran sus variantes, estados y casos de uso. Los addons de Storybook permiten añadir tablas de props, controles interactivos, checks de accesibilidad y documentación en MDX.
Una buena práctica es escribir las stories durante el desarrollo del componente, no después. Esto fuerza a pensar en la API del componente desde la perspectiva del consumidor y detecta problemas de diseño antes de que lleguen a producción.
Optimización: tree shaking y bundle size
Una librería de componentes que infla el bundle de las apps que la consumen genera rechazo inmediato. Configura el build para que soporte tree shaking: publica módulos ES (ESM), marca el paquete como sideEffects: false en package.json, y evita importaciones barrel que impiden la eliminación de código no usado.
Mide el tamaño de cada componente con herramientas como bundlephobia o size-limit. Establece un presupuesto de tamaño por componente y monitorízalo en CI para evitar regresiones. Un botón no debería pesar más de 2-3 KB gzipped.
Mantenimiento a largo plazo
Una librería de componentes es un producto que necesita mantenimiento continuo. Planifica actualizaciones de dependencias, deprecaciones de componentes obsoletos, y migraciones cuando las versiones de framework cambian. Automatiza todo lo posible: dependabot para dependencias, CI para tests y publicación, y alertas para regresiones de tamaño.
Asigna ownership claro: cada componente debe tener un equipo o persona responsable. Cuando nadie es dueño de un componente, nadie lo mantiene.
Puntos clave
- Elige monorepo para librerías grandes y single-package para equipos pequeños
- La elección de framework debe alinearse con el ecosistema de tu organización
- Usa versionado semántico y automatiza la publicación con Changesets o semantic-release
- Combina tests unitarios, de interacción, visuales y de accesibilidad
- Optimiza para tree shaking y monitoriza el bundle size en CI
- Asigna ownership claro para garantizar el mantenimiento a largo plazo
¿Necesitas construir una librería de componentes?
Diseñamos la arquitectura, configuramos el tooling y construimos los componentes fundacionales para que tu equipo escale con confianza.