Maison  >  Article  >  outils de développement  >  Quelle est la différence entre le symbole tilde du compositeur ~ et le symbole de puissance ^

Quelle est la différence entre le symbole tilde du compositeur ~ et le symbole de puissance ^

藏色散人
藏色散人avant
2020-08-12 13:16:554026parcourir

La colonne tutorielle suivante de composer vous présentera la différence entre le symbole tilde du compositeur ~ et le symbole de pouvoir ^. J'espère qu'elle sera utile aux amis dans le besoin !

Quelle est la différence entre le symbole tilde du compositeur ~ et le symbole de puissance ^

J'ai vu trop de gens écrire des numéros de version au hasard (en fait, c'est bien mieux maintenant qu'avant. La prochaine version de 1.9.0 doit être la 2.0.0). , 2.9 .0 La prochaine version doit être 3.0.0... Principalement parce qu'il n'y avait pas de norme pour nommer les numéros de version auparavant, et que chacun écrivait selon son humeur. Plus tard, le versionnage sémantique a été promu et la situation de dénomination des numéros de version a été améliorée, mais il y a encore beaucoup de gens qui ne savent pas ce que signifie le numéro de version à trois segments (mourrez-vous si vous enseignez ces spécifications dans diverses écoles de formation). ...).

Pour faire simple (je le déplace juste, le site mentionné ci-dessus le rend plus clair), la signification de chaque segment du numéro de version à trois segments est :

Grande version. version. Version du patch

Parlons d'abord de la version du patch la plus évidente. Si votre logiciel ou votre bibliothèque a déjà subi des corrections de bugs, la version du correctif doit être +1.

Parlons du numéro de version mineure. Si vous ajoutez une nouvelle fonctionnalité, comme un jeu RPG qui récupère automatiquement les choses, ou une nouvelle méthode dans votre base de code, cela ne posera pas de problèmes de compatibilité (BC) si les utilisateurs mettent à jour votre base de code, donc une petite version n° + 1.

Enfin, si votre logiciel est complètement refactorisé, ou si votre base de code est complètement refactorisée afin que les utilisateurs mettant à niveau la nouvelle bibliothèque entraîneront inévitablement des problèmes de compatibilité, alors le numéro de version majeure +1.

Bien sûr, il y aura des situations où des bugs seront modifiés et des fonctions ajoutées en même temps. Bref, si le chiffre précédent nécessite +1, les chiffres suivants doivent dans tous les cas être remis à zéro.

En fait, il n'est pas nécessaire d'être trop strict sur les logiciels pour les utilisateurs finaux, car les utilisateurs finaux ne se soucient pas beaucoup de la version (à part le gros numéro de version..., donc la version de style chrome des numéros sont apparus, et Firefox a également emboîté le pas. ...), mais pour les auteurs de fichiers de bibliothèque, il est préférable de respecter le numéro de version, car le numéro de version que vous définissez fournit des informations très importantes aux appelants de la bibliothèque, et ils doivent utiliser votre numéro de version pour déterminer s’il faut éviter les problèmes de compatibilité.

Pour donner un exemple plus classique, bien que Symfony 2/3/4 soit similaire dans son utilisation, car il existe des incohérences d'interface entre ces trois versions, le plus grand numéro de version doit être +1. Si votre fichier de bibliothèque présente un changement d'interface qui le rend incompatible avec la version précédente, même s'il n'y en a qu'une, vous devez +1 au numéro de version majeure.

Et si vous développez certains projets avec Symfony 3.0.x, même si vous effectuez une mise à niveau directement vers 3.4.x, il n'y a aucun problème en théorie.

Après avoir parlé du numéro de version à trois segments, parlons d'un problème qui trouble PHPer. Que signifient les symboles ^ et ~ qui spécifient le numéro de version dans composer.json ? Quelle est la différence ?

Avant d'écrire ce blog, j'ai fait une recherche sur Baidu et je voulais savoir s'il y avait beaucoup d'articles connexes et si cet article valait la peine d'être écrit. Les résultats de la recherche montrent que quelqu'un l'a effectivement résumé. Bien que la plupart d'entre eux n'aient qu'un seul exemple :

~1.2.3 représente 1.2.3 <= numéro de version< 1.3.0

^1.2.3 représente 1.2.3 <= version number< ; 2.0.0

Sur la base du contenu de transfert ci-dessus, j'ajouterai un peu plus, ~ signifie que le numéro de version ne peut changer que le dernier paragraphe (si c'est ~x.y, la fin est y, si c'est ~x.y.z, la fin est z), Par exemple, dans ce cas :

~1.2 est égal à >=1.2.0 <2.0.0

et le ^ Le symbole est lié au versionnement sémantique mentionné ci-dessus. Cela signifie essayer d'utiliser la dernière version, mais pour s'assurer qu'aucun problème de compatibilité ne se produit. En d'autres termes, en plus du numéro de version majeure, le numéro de version mineure et le numéro de version du correctif peuvent. être changé.

Mais il semble qu'il y ait un détail très important que personne n'a mentionné jusqu'à présent. Dans le versioning sémantique, le numéro de version commençant par 0 est assez spécial, et comme ^ respecte strictement les règles du versioning sémantique, le La situation suivante apparaîtra (les versions antérieures du compositeur n'avaient pas ce traitement, mais il a été corrigé ultérieurement) :

^0.3.0 est égal à>=0.3.0 <0.4.0

<🎜; > Hein ? Ne devrait-il pas être <1.0.0 ?

La raison est que la règle du versioning sémantique est que si le numéro de version majeure commence par 0, cela signifie qu'il s'agit d'une version instable (s'il est dans un état instable, le numéro de version mineure). n'est pas autorisé à être rétrocompatible ! Donc si vous souhaitez spécifier une bibliothèque commençant par 0, vous devez faire attention :

~0.1 Cette façon d'écrire est très dangereuse, car ~0.1 est égal à >=0.1.0 <1.0; 0, ce qui peut provoquer un échec. En cas de compatibilité ascendante, la manière la plus sûre d'écrire est

^0.1 (égal à >=0.1.0; <0.2.0)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer