¿Qué es el Versionado Semántico?
🎯 Introducción
El Versionado Semántico (o SemVer) es un sistema de numeración que nos ayuda a comunicar el tipo de cambios que hacemos en nuestro software. Es como un lenguaje universal que todos los desarrolladores entienden.
Cada versión se representa con tres números separados por puntos:
MAJOR.MINOR.PATCH
O en Español:
MAYOR.MENOR.PARCHE
1.2.3
- El primer número (MAJOR) indica cambios que rompen la compatibilidad
- El segundo número (MINOR) indica nuevas funcionalidades compatibles
- El tercer número (PATCH) indica correcciones de errores compatibles
🖥️ ¿Cómo funciona?
MAJOR (1.x.x)
Este número cambia cuando hacemos cambios que rompen la compatibilidad con versiones anteriores. Por ejemplo:
- Eliminamos una función que otros desarrolladores podrían estar usando
- Cambiamos cómo funciona una característica existente
- Modificamos la estructura de datos que devuelve una API
MINOR (x.1.x)
Este número aumenta cuando agregamos nuevas funcionalidades que son compatibles con versiones anteriores:
- Agregamos nuevas funciones
- Incluimos nuevas características
- Añadimos nuevas opciones de configuración
PATCH (x.x.1)
Este número cambia cuando hacemos correcciones de errores que son compatibles con versiones anteriores:
- Arreglamos bugs
- Mejoramos el rendimiento
- Corregimos errores tipográficos en la documentación
📌 Ejemplos Prácticos
Veamos algunos ejemplos de cómo cambiarían los números:
// Versión 1.0.0 - Primera versión establefunction saludar(nombre) { return `¡Hola ${nombre}!`;}
// Versión 1.1.0 - Nueva característica (MINOR)function saludar(nombre, idioma = "es") { const saludos = { es: "¡Hola", en: "Hello", fr: "Bonjour", }; return `${saludos[idioma]} ${nombre}!`;}
// Versión 1.1.1 - Corrección de bug (PATCH)function saludar(nombre, idioma = "es") { const saludos = { es: "¡Hola", en: "Hello", fr: "Bonjour", }; return `${saludos[idioma] || saludos.es} ${nombre}!`; // Corregido para manejar idiomas no soportados}
// Versión 2.0.0 - Cambio que rompe compatibilidad (MAJOR)function saludar(nombre, opciones = {}) { const { idioma = "es", formal = false } = opciones; const saludos = { es: formal ? "Buenos días" : "¡Hola", en: formal ? "Good day" : "Hello", fr: formal ? "Bonjour" : "Salut", }; return `${saludos[idioma] || saludos.es} ${nombre}!`;}
Cuando cambiamos el número MAJOR, debemos documentar claramente los cambios que rompen la compatibilidad para que otros desarrolladores puedan adaptarse.
🔢 Versiones Preliminares
A veces necesitamos publicar versiones que aún no están listas para producción. Para esto, usamos etiquetas especiales:
- alpha: 1.0.0-alpha.1
- beta: 1.0.0-beta.2
- rc (release candidate): 1.0.0-rc.1
☝️🤓
🏋️♂️ Ejercicio
Analiza los siguientes cambios y determina qué número de versión debería incrementarse:
- Se arregló un bug donde la función
calcularTotal()
no manejaba correctamente los valores nulos - Se agregó soporte para pagos con PayPal
- Se cambió la estructura de la respuesta de la API de
/usuarios
de{ data: [...] }
a{ usuarios: [...] }
- Se mejoró el rendimiento de la función de búsqueda
- Se agregó documentación en español
🚀 Extra
Investiga sobre:
- ¿Por qué es importante mantener las dependencias actualizadas?
- ¿Qué herramientas existen para automatizar el versionado semántico?
- ¿Qué estrategias existen para comunicar cambios importantes a los usuarios de tu código?