Semver: Un Contrato Entre Tú y Tus Usuarios
Versionamiento Semántico (semver) es un esquema de versionamiento que comunica la naturaleza de los cambios. Cuando ves 2.1.0 → 2.2.0, sabes que es una adición compatible. Cuando ves 2.1.0 → 3.0.0, sabes que algo se rompió.
El Formato: MAJOR.MINOR.PATCH
| Componente | Cuándo Incrementar | Ejemplo |
|---|---|---|
| MAJOR | Breaking changes — API incompatible con versión anterior | 1.0.0 → 2.0.0 |
| MINOR | Nuevas features — adiciones compatibles | 1.0.0 → 1.1.0 |
| PATCH | Bug fixes — correcciones compatibles | 1.0.0 → 1.0.1 |
Qué Cuenta Como Breaking Change
- Eliminar una función o método público
- Cambiar parámetros de función
- Cambiar tipos de retorno
- Cambiar comportamiento por defecto
- Dejar de soportar un runtime
- Renombrar módulos exportados
Rangos de Versión en package.json
{
"dependencies": {
"exacto": "1.2.3", // Solo 1.2.3
"caret": "^1.2.3", // >=1.2.3 <2.0.0 (más común)
"tilde": "~1.2.3", // >=1.2.3 <1.3.0
"wildcard": "1.x" // >=1.0.0 <2.0.0
}
}| Rango | Instala | Nivel de Riesgo |
|---|---|---|
^1.2.3 | 1.2.3 hasta 1.x.x | Bajo — sin breaking dentro del major |
~1.2.3 | 1.2.3 hasta 1.2.x | Muy bajo — solo patches |
1.2.3 | Exactamente 1.2.3 | Ninguno — pero sin updates de seguridad |
Versiones Pre-release
1.0.0-alpha.1 // Desarrollo inicial, inestable
1.0.0-beta.1 // Feature-complete, puede tener bugs
1.0.0-rc.1 // Release candidate, listo para pruebas
1.0.0 // Release estableReglas Prácticas
- Empieza en 0.1.0 para proyectos nuevos.
- Lanza 1.0.0 cuando tu API es usada en producción por otros.
- Usa
^(caret) en package.json — es el estándar. - Usa lockfiles para fijar versiones exactas en producción.
- Automatiza con conventional commits + semantic-release o changesets.
Parsea versiones: Formateador JSON — valida y formatea tu package.json.