Validador de SemVer
Valida versiones semánticas y analiza rangos.
Versión
- MAJOR
- MINOR
- PATCH
- Preliminar
- Metadatos de compilación
Rango
Resultado JSON
Qué cuenta como versión
Gramática estricta de SemVer 2.0.0. Los tres números son enteros ASCII no negativos sin ceros iniciales.
- MAJOR.MINOR.PATCH
- ruptura / compatible / corrección
- 1.2.3-alpha.1
- preliminar, queda por debajo de 1.2.3
- 1.2.3+build.5
- metadatos de compilación, se ignoran para la precedencia
- 1.2.3-0.3
- los identificadores preliminares numéricos se comparan como números
- v1.2.3
- no es una versión semántica (FAQ de la especificación)
- 01.2.3
- no válida: cero inicial
- 1.2.3-01
- no válida: preliminar numérica rellenada con ceros
- 1.2.3+0.09
- válida: los metadatos de compilación pueden rellenarse con ceros
Operadores de rango
- 1.2.3
- exactamente esta versión
- ^1.2.3
- compatible: >=1.2.3 <2.0.0-0
- ~1.2.3
- solo parches: >=1.2.3 <1.3.0-0
- >=1.2.3 <2.0.0
- AND de comparadores en un mismo conjunto
- 1.2.3 - 2.0.0
- rango inclusivo, con espacios obligatorios a ambos lados
- 1.2.x / 1.x / *
- versiones parciales y comodines
- a || b
- unión: cualquiera de los conjuntos puede coincidir
- ~>1.2.3
- alias histórico de npm, tratado como ~1.2.3
Cómo completa npm las versiones parciales
Verificado con node-semver; el sufijo -0 es un centinela de npm que excluye las versiones preliminares de la serie siguiente.
| Rango | Expandido |
|---|---|
| ^1.2.3 | >=1.2.3 <2.0.0-0 |
| ^0.2.3 | >=0.2.3 <0.3.0-0 |
| ^0.0.3 | >=0.0.3 <0.0.4-0 |
| ^1 | >=1.0.0 <2.0.0-0 |
| ~1.2.3 | >=1.2.3 <1.3.0-0 |
| ~1.2 | >=1.2.0 <1.3.0-0 |
| ~1 | >=1.0.0 <2.0.0-0 |
| 1.2.x | >=1.2.0 <1.3.0-0 |
| 1.x | >=1.0.0 <2.0.0-0 |
| 1.2.3 - 2.0.0 | >=1.2.3 <=2.0.0 |
| 1.2.3 - 2 | >=1.2.3 <3.0.0-0 |
| >1.x | >=2.0.0 |
Precedencia de las versiones preliminares
1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0
Los identificadores numéricos se comparan como números y quedan por debajo de los alfanuméricos; un prefijo más corto tiene menor precedencia. Los metadatos de compilación nunca importan.
Errores frecuentes
Estos se pegan tal cual desde package.json y desde historiales de chat.
- "1.2.3",
- Las comillas y la coma han venido de package.json: pega solo la versión.
- v1.2.3
- Las etiquetas de Git llevan una v; las versiones semánticas no.
- 1.2
- Dos números son un rango, no una versión.
- 1.2.3-01
- El modo loose de npm lo lee como 1.2.3-1 y lo reescribe en silencio.
Qué reglamento se usa
- El veredicto sobre una cadena de versión es SemVer 2.0.0 estricto: sin modo loose, sin reescritura y sin normalización.
- Los rangos siguen npm node-semver, porque la especificación SemVer no define rangos.
- Esta herramienta es más estricta que npm con los rangos: se rechaza un prefijo v o un cero inicial dentro de un rango, y un lado vacío de || es un error en lugar de «cualquier versión».
- Las lecturas de npm que se muestran para una versión no válida proceden de semver.valid(v, {loose:true}) y semver.coerce(v). Son solo informativas: nunca equivalen a aprobar.
- Las posiciones cuentan puntos de código y empiezan en 1 en la interfaz y en 0 en el JSON.
Cómo se usa
- Pega una versión como 1.2.3-beta.1+build.5 en el campo de la izquierda. Todo lo de abajo se actualiza mientras escribes: no hay ningún botón que pulsar.
- Opcionalmente, pega un rango de npm como ^1.2.0 a la derecha para ver cómo se relacionan la versión y el rango.
- Lee primero la insignia: válida o no, y si no lo es, qué regla falla en qué carácter.
- Marca «Incluir versiones preliminares» cuando quieras la lectura includePrerelease de npm para el rango.
- Despliega «Resultado JSON» para copiar o descargar la lista completa de problemas.
Ejemplo resuelto
Versión + rango
1.2.3-beta.1+build.5 ^1.2.0
Resultado
SemVer válido (MAJOR 1, MINOR 2, PATCH 3, preliminar beta.1, compilación build.5). ^1.2.0 se expande a >=1.2.0 <2.0.0-0, límites [1.2.0, 2.0.0). Veredicto: no cumple; el conjunto no tiene un comparador preliminar para 1.2.3.
Marca «Incluir versiones preliminares» y el mismo par pasa a cumplirse.
Limitaciones
- El veredicto es SemVer 2.0.0 estricto, así que se rechazan v1.2.3 y 1.2.3-01 aunque el modo loose de npm los acepte o los reescriba.
- Los rangos siguen solo npm node-semver: git describe, Cargo, PEP 440 y las versiones de módulos de Go quedan fuera del alcance.
- Sin consultas a registros: la herramienta no puede decirte qué versión instalaría realmente ^1.2.0.
- Una versión y un rango a la vez: sin listas por lotes, sin ordenación, sin comparación por pares y sin vista previa de incrementos.
- Los números centrales por encima de Number.MAX_SAFE_INTEGER se marcan y se comparan como texto, nunca se convierten a un número JS.
- Nada sale de la página: sin red, sin almacenamiento y sin parámetros en la URL; al recargar se borra todo.
Herramientas relacionadas
Más utilidades para desarrolladores que se ejecutan por completo en tu navegador.