Aller au contenu

Testeur de plage semver

Semver Range Tester

Indique quelles versions satisfont une plage, compare deux versions et trie une liste dans l’ordre de préséance.

Répond aux deux questions que l'on se pose réellement sur le versionnage sémantique : est-ce que cette version satisfait cette plage, et laquelle de ces versions npm installerait-il. Il compare aussi deux versions par préséance et montre ce que produirait chaque incrément `npm version`.

🔒 Fonctionne entièrement dans votre navigateursemverversionnpm

Plage

Couvre : 1.0.0 ou plus récente et plus ancienne que 2.0.0

La grammaire des plages de npm : `^` `~` `x` `-` `||` et les opérateurs de comparaison. Elle ne fait pas partie de semver.org, qui ne définit que le format d’une version et son ordre.

Versions

Une par ligne, ou séparées par des virgules.

Lesquelles correspondent

Préversions
  1. —1.0.0-alpha
  2. —1.0.0-alpha.1
  3. —1.0.0-alpha.beta
  4. —1.0.0-beta
  5. —1.0.0-beta.2
  6. —1.0.0-beta.11
  7. —1.0.0-rc.1
  8. correspond1.0.0
  9. correspond1.2.0serait installée
  10. —2.0.0-rc.1
  11. —2.0.0
  12. —2.1.3

En comparer deux

Ordre

1.0.0-beta.11 est supérieure

Différence

prerelease

La précédence suit exactement la clause 11 de semver.org, métadonnées de build comprises — c’est-à-dire ignorées.

Version suivante

Chaque type de publication et la version qu’il produit.
major2.0.0
minor1.3.0
patch1.2.4
premajor2.0.0-alpha.0
preminor1.3.0-alpha.0
prepatch1.2.4-alpha.0
prerelease1.2.4-alpha.0

Ce que produirait `npm version <type>`.

Une règle surprend tout le monde : une préversion ne satisfait une plage que si la plage mentionne elle-même une préversion du même major.minor.patch. C’est pourquoi ^1.0.0 ne correspond pas à 2.0.0-beta.1, et pourquoi une étiquette rc ne s’installe jamais toute seule par accident.

Comment s’en servir

  1. Écrivez la plage

    `^1.0.0`, `~1.2.3`, `>=1.2.7 <1.3.0`, `1.2.3 - 2.3.4` et `||` fonctionnent tous. Une description en langage courant de ce qu'elle accepte apparaît en dessous.

  2. Collez les versions que vous avez

    Une par ligne, ou séparées par des virgules — la sortie de `npm view <pkg> versions` se colle telle quelle. Chacune est marquée comme correspondante ou non, et celle que npm installerait est étiquetée.

  3. Comparez-en deux, ou préparez la prochaine version

    Le panneau de comparaison suit exactement la clause 11 de semver.org. La table des incréments montre ce que `npm version major`, `preminor` et les autres produiraient à partir d'un point de départ donné.

Questions fréquentes

Pourquoi `^1.0.0` ne correspond-il pas à `2.0.0-beta.1` ?

Deux raisons à la fois. `^1` n'atteint jamais la majeure 2 et, séparément, une préversion ne satisfait une plage que lorsque la plage nomme elle-même une préversion des mêmes majeure.mineure.correctif. Cette seconde règle est ce qui empêche une étiquette `rc` de s'installer par accident.

Pourquoi `^0.2.3` se comporte-t-il différemment ?

En dessous de 1.0.0, le caret se resserre sur la mineure : `^0.2.3` autorise 0.2.x mais pas 0.3.0, parce qu'un projet en 0.x est réputé casser à chaque mineure. C'est la règle de npm plutôt que celle de semver.org, et elle surprend à chaque fois.

`1.0.0+build.1` est-il différent de `1.0.0` ?

Chaînes différentes, même préséance — la clause 10 dit que les métadonnées de build sont ignorées lors de la comparaison. Ce qui veut dire qu'un tri sur des versions qui ne diffèrent que par leurs métadonnées de build n'est pas stable, et que deux versions de ce genre ne peuvent pas être ordonnées du tout.

La syntaxe des plages fait-elle partie de semver ?

Non. semver.org définit le format d'une version et la façon dont deux versions se comparent, et s'arrête là. `^`, `~`, `x` et `||` sont la grammaire de plages de npm, que les autres écosystèmes ont soit empruntée, soit remplacée — Cargo, Composer et pip diffèrent chacun dans les détails.

À alimenter depuis

Ensuite

Ces outils acceptent ce que celui-ci produit : le résultat peut y aller directement.