Validateur SemVer

Validez des versions sémantiques et analysez des plages.

Ce qui compte comme version

Grammaire SemVer 2.0.0 stricte. Les trois nombres sont des entiers ASCII non négatifs sans zéro initial.

MAJOR.MINOR.PATCH
rupture / compatible / correction
1.2.3-alpha.1
préversion, se classe sous 1.2.3
1.2.3+build.5
métadonnées de build, ignorées pour la préséance
1.2.3-0.3
les identifiants numériques de préversion se comparent comme des nombres
v1.2.3
pas une version sémantique (FAQ de la spécification)
01.2.3
non valide : zéro initial
1.2.3-01
non valide : préversion numérique complétée par un zéro
1.2.3+0.09
valide : les métadonnées de build peuvent avoir des zéros initiaux

Opérateurs de plage

1.2.3
exactement cette version
^1.2.3
compatible : >=1.2.3 <2.0.0-0
~1.2.3
correctif uniquement : >=1.2.3 <1.3.0-0
>=1.2.3 <2.0.0
ET de comparateurs dans un même ensemble
1.2.3 - 2.0.0
plage inclusive, espaces obligatoires des deux côtés
1.2.x / 1.x / *
versions partielles et jokers
a || b
union : l’un ou l’autre ensemble peut correspondre
~>1.2.3
alias historique npm, traité comme ~1.2.3

Comment npm complète les versions partielles

Vérifié avec node-semver ; le suffixe -0 est la sentinelle npm qui exclut les préversions de la série suivante.

Comment npm complète les versions partielles
PlageDéveloppée
^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

Préséance des préversions

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

Les identifiants numériques se comparent comme des nombres et se classent sous les alphanumériques ; un préfixe plus court se classe plus bas. Les métadonnées de build ne comptent jamais.

Erreurs courantes

Celles-ci arrivent directement depuis package.json et les historiques de discussion.

"1.2.3",
Les guillemets et la virgule viennent de package.json - collez uniquement la version.
v1.2.3
Les étiquettes Git portent un v, les versions sémantiques non.
1.2
Deux nombres forment une plage, pas une version.
1.2.3-01
Le mode souple de npm le lit comme 1.2.3-1 et le réécrit silencieusement.

Quel référentiel est utilisé

  • Le verdict sur une chaîne de version suit SemVer 2.0.0 strict - pas de mode souple, pas de réécriture, pas de normalisation.
  • Les plages suivent npm node-semver, car la spécification SemVer ne définit pas les plages.
  • Cet outil est plus strict que npm sur les plages : un préfixe v ou un zéro initial dans une plage est refusé, et un côté vide de || est une erreur plutôt que « n’importe quelle version ».
  • Les lectures npm affichées pour une version invalide viennent de semver.valid(v, {loose:true}) et semver.coerce(v). Elles sont purement informatives - jamais une validation.
  • Les positions comptent les points de code et commencent à 1 dans l’interface, à 0 dans le JSON.

Comment l’utiliser

  1. Collez une version comme 1.2.3-beta.1+build.5 dans le champ de gauche. Tout ce qui suit se met à jour au fil de la saisie - aucun bouton à presser.
  2. Collez éventuellement une plage npm comme ^1.2.0 à droite pour voir comment la version et la plage se rapportent l’une à l’autre.
  3. Lisez d’abord le badge : valide ou non, et si non, quelle règle a échoué à quel caractère.
  4. Cochez Inclure les préversions pour obtenir la lecture includePrerelease de npm.
  5. Dépliez le résultat JSON pour copier ou télécharger la liste complète des problèmes.

Exemple détaillé

Version + plage

1.2.3-beta.1+build.5  ^1.2.0

Résultat

SemVer valide (MAJEUR 1, MINEUR 2, CORRECTIF 3, préversion beta.1, build build.5). ^1.2.0 se développe en >=1.2.0 <2.0.0-0, bornes [1.2.0, 2.0.0). Verdict : non satisfait - l’ensemble n’a pas de comparateur de préversion pour 1.2.3.

Cochez Inclure les préversions et la même paire devient satisfaite.

Limites

  • Le verdict suit SemVer 2.0.0 strict, donc v1.2.3 et 1.2.3-01 sont refusés même si le mode souple de npm les accepte ou les réécrit.
  • Les plages suivent uniquement npm node-semver - git describe, Cargo, PEP 440 et les versions de modules Go sont hors périmètre.
  • Aucune requête au registre : l’outil ne peut pas dire quelle version ^1.2.0 installerait réellement.
  • Une version et une plage à la fois - pas de listes par lot, de tri, de comparaison par paires ni d’aperçu d’incrémentation.
  • Les nombres centraux au-dessus de Number.MAX_SAFE_INTEGER sont signalés et comparés comme texte, jamais convertis en nombre JS.
  • Rien ne quitte la page : pas de réseau, pas de stockage, pas de paramètres d’URL - un rechargement efface tout.

D’autres aides pour développeurs qui fonctionnent entièrement dans votre navigateur.