Vérificateur de Plage SemVer | Testez ^ ~ et les plages de version
Saisissez une version et une expression de plage pour voir si la version la satisfait. L'outil interprète les accents circonflexes (^), les tildes (~), les plages en x (1.x), les comparateurs (>=1.0.0 <2.0.0) et les plages à trait d'union (1.0.0 - 2.0.0), puis affiche un verdict Correspond / Ne correspond pas avec les versions minimale et maximale que la plage autorise.
💡 À propos de cet outil
Si vous avez déjà fixé une dépendance dans un package.json en vous demandant « est-ce que ^1.2.3 autorise vraiment 1.9.0 ? », voici la machine à réponses. Les opérateurs de plage SemVer semblent simples, mais chacun découpe une fenêtre différente. ^1.2.3 autorise tout jusqu'à 2.0.0 exclu. ~1.2.3 est bien plus strict : seulement les correctifs dans 1.2.x. Et le circonflexe change de comportement sous 1.0.0 : ^0.2.3 n'autorise que 0.2.x, car les versions mineures avant 1.0 sont considérées comme cassantes.
Le panneau minimum/maximum est ce qui fait gagner du temps de débogage. Au lieu de développer l'opérateur de tête, vous voyez directement les versions limites résolues, avec ∞ pour les plages ouvertes comme >=1.0.0. Combiné à l'explication en langage clair, vous pouvez contrôler la résolution d'un lockfile ou une proposition de mise à jour en quelques secondes, sans installer le paquet semver ni ouvrir un REPL.
🧐 Questions fréquentes
^1.2.3 inclut-il 2.0.0 ?
Non. Le circonflexe autorise >=1.2.3 <2.0.0, donc 2.0.0 se situe juste hors de la fenêtre. Le panneau Version maximale affiche le plafond 1.x.
Quelle est la différence entre ^ et ~ ?
Le circonflexe autorise les changements qui ne modifient pas le segment non nul le plus à gauche (généralement mineur et correctif). Le tilde n'autorise que les correctifs quand un mineur est précisé, donc ~1.2.3 admet 1.2.x mais pas 1.3.0.
Pourquoi ^0.2.3 se comporte-t-il différemment ?
Sous 1.0.0, SemVer traite chaque changement de mineur comme potentiellement cassant. ^0.2.3 se résout donc en >=0.2.3 <0.3.0 et non en <1.0.0.
Comment sont gérées les préversions comme 1.0.0-beta ?
Une préversion a une précédence inférieure à sa version finale, donc 1.0.0-beta se classe avant 1.0.0. Le vérificateur analyse l'étiquette de préversion et l'ordonne en conséquence lors du test de la plage.
Puis-je tester des plages composées ?
Oui. Les comparateurs séparés par des espaces sont combinés par ET (>=1.0.0 <2.0.0), et || permet de combiner des plages entières par OU. La ligne d'explication indique quelle logique s'applique.
📚 Le saviez-vous
Le versionnage sémantique a été popularisé par Tom Preston-Werner, cofondateur de GitHub, qui a publié la spécification SemVer en 2010 pour combattre ce qu'il appelait « l'enfer des dépendances ». Les opérateurs ^ et ~ que la plupart des développeurs utilisent au quotidien ne font en réalité pas partie du cœur de la spécification SemVer : ils viennent de la bibliothèque node-semver de npm, devenue la grammaire de facto lorsque npm a adopté les plages avec circonflexe comme préfixe d'enregistrement par défaut. C'est ce réglage par défaut qui explique pourquoi votre package.json regorge de circonflexes : en lançant npm install lodash, npm écrit ^4.17.21, vous abonnant en silence à toutes les futures versions mineures et correctives de la lignée 4.x. D'autres écosystèmes ont repris l'idée en ajustant les règles : Cargo, en Rust, traite par défaut une exigence 1.2.3 simple comme un circonflexe.