Petit rappel du semver avec npm

Combien de fois vous êtes vous demandé à quoi correspond un ^ ou encore un ~ devant une version de package ?

Dans cet article, on va essayer de faire simple mais surtout efficace pour enfin répondre à cette question !

Le semver c'est quoi ?

Le semver (pour Semantic Versioning) est la gestion sémantique des versions, en bon français.

Pour faire simple, c'est une façon de numéroter les versions de manière parlante en ajoutant du sens.

Le site semver.org nous donne la définition suivante pour comprendre la convention :

Étant donné un numéro de version MAJEURE.MINEURE.CORRECTIF, il faut incrémenter :

  1. le numéro de version MAJEUR quand il y a des changements non rétrocompatibles,
  2. le numéro de version MINEUR quand il y a des ajouts de fonctionnalités rétrocompatibles,
  3. le numéro de version de CORRECTIF quand il y a des corrections d’anomalies rétrocompatibles.

Cette convention est adoptée dans de nombreux langages et l'ensemble des packages npm l'utilise.

Il y a aussi possibilité d'étendre ces notations pour inclure des phases de RC ou de beta par exemple. Je vous conseille la lecture du site semver.org qui sera plus exhaustif sur le sujet.

Les symboles dans le package.json

npm va venir enrichir ces notions avec des symboles pour appliquer des règles aux versions de packages.

Elles interviendrons notamment lors de vos npm install :

  • ^ : cible les releases mineures (exemple : pour ^0.2.0, on peut avoir en version compatible 0.2.1, 0.3.0 et supérieure)
  • ~ : cible les releases de corrections (exemple : pour ~0.2.0, on peut avoir en version compatible 0.2.1 mais pas 0.3.0)
  • > : cibles les releases supérieures
  • >= : cibles les releases supérieures ou égales
  • <= : cibles les releases inférieures ou égales
  • < : cibles les releases inférieures
  • = ou pas de symbole : cible la release exacte
  • - : cible les releases dans un intervalle (exemple : pour 0.2.0 - 0.4.2, on peut avoir en version compatible 0.2.1 et 0.3.0 mais pas 0.4.3)
  • latest : on utilise la dernière version du package

Avec le symbole ||, vous avez la possibilité de combiner des ensembles. Par exemple, ^0.2.0 || >=0.5.0 <1.2.0 cible les releases mineures à partir de 0.2.0 ou les releases à partir de 0.5.0 mais strictement inférieures à 1.2.0.

Le lien à avoir

Si, malgré ce tableau, vous vous faites toujours des nœuds au cerveau pour savoir ce qui se passe avec telle ou telle notation, npm vous propose ce calculateur de notation. En fonction de lib npm ciblée et de votre combinaison, il va vous indiquer les versions cibles.

Conclusion

J'ai essayé d'être le plus minimal possible dans les descriptions des symboles. Dans la documentation de npm, il existe d'autres façons et exemples de combiner les symboles et les ensembles que je n'ai pas mentionnés car ils ne m'ont pas semblés pertinents (et je pense qu'ils ne vous serviront pas tous les jours).

J'ai rédigé cet article pour m'en faire un mémo, l'avoir toujours sous la main et le mettre dans mes favoris.

Vous pouvez en faire autant !

Merci d'avoir lu cet article !
Il a été posté initialement sur le blog de @younup_it :
https://www.younup.fr/blog/petit-rappel-du-semver-avec-npm

23