4590 votes

Quelle est la différence entre tilde(~) et caret(^) dans package.json ?

Après avoir mis à jour la dernière version stable node et npm J'ai essayé. npm install moment --save . Il enregistre l'entrée dans le package.json avec le caret ^ préfixe. Auparavant, il s'agissait d'un tilde ~ préfixe.

  1. Pourquoi ces changements sont-ils effectués dans npm ?
  2. Quelle est la différence entre le tilde ~ et caret ^ ?
  3. Quels sont les avantages par rapport aux autres ?

60 votes

Pour info, vous pouvez empêcher les préfixes ou en utiliser un personnalisé en faisant : npm config set save-prefix='' . (Bâton ~ entre guillemets si c'est ce que vous préférez). Je fais personnellement cela et j'emballe sous film rétractable les choses en production.

25 votes

Tous les détails minutieux sur le fonctionnement et les différences entre le tilde et le caret : github.com/npm/node-semver#tilde-ranges-123-12-1

13 votes

Cet outil est une aide précieuse pour tester semver.npmjs.com

24voto

Avinash Points 2234

Une explication en une phrase

Le système de version standard est major.minor.build (par exemple 2.4.1).

npm vérifie et corrige la version d'un paquet particulier en se basant sur ces caractères

~ : la version majeure est corrigée, la version mineure est corrigée, correspond à n'importe quel numéro de construction.

par exemple : ~2.4.1 signifie qu'il vérifiera la présence de 2.4.x, où x est n'importe quoi.

^ : la version majeure est corrigée, correspond à toute version mineure, correspond à tout numéro de build

par exemple : ^2.4.1 signifie qu'il vérifiera 2.x.x où x est n'importe quoi

9 votes

Je vois 7 lignes dans cette réponse

23voto

Mudassir Points 59

Tilde ~ correspond à la version mineure, si vous avez installé un paquet qui a 1.4.2 et après votre installation, les versions 1.4.3 et 1.4.4 sont également disponibles si dans votre package.json il est utilisé comme ~1.4.2 alors npm install dans votre projet après la mise à jour installera 1.4.4 dans votre projet. Mais si une version 1.5.0 est disponible pour ce paquet, elle ne sera pas installée par ~. C'est ce qu'on appelle une version mineure.

Caret ^ correspond à la version majeure, si le paquet 1.4.2 est installé dans votre projet et qu'après votre installation la version 1.5.0 est publiée, ^ installera la version majeure. Il ne permettra pas d'installer la version 2.1.0 si vous avez ^1.4.2 .

Version corrigée si vous ne voulez pas changer la version du paquet à chaque installation, utilisez la version fixe sans caractère spécial, par exemple "1.4.2"

Dernière version * Si vous voulez installer la dernière version, utilisez uniquement * devant le nom du paquet.

3 votes

Cette réponse est trompeuse. SemVer indique clairement, Un numéro de version normal DOIT prendre la forme X.Y.Z [où] X est la version majeure, Y est la version mineure et Z est la version du correctif.

16voto

Abdou Sameh Points 139

Vous avez probablement vu le tilde (~) et l'insigne (^) dans le fichier package.json. Quelle est la différence entre les deux ?

Lorsque vous faites npm install moment --save, il enregistre l'entrée dans le package.json avec le préfixe caret (^).

Le tilde (~)

Dans les termes les plus simples, le tilde (~) correspond à la version mineure la plus récente (le chiffre du milieu). ~1.2.3 correspondra à toutes les versions 1.2.x mais pas à la 1.3.0.

Le signe d'insertion (^)

Le signe d'insertion (^), quant à lui, est plus détendu. Il vous mettra à jour à la version majeure la plus récente (le premier chiffre). ^1.2.3 correspondra à toute version 1.x.x, y compris la 1.3.0, mais ne correspondra pas à la 2.0.0.

Référence : https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b

0 votes

Encore une fois, cette réponse est trompeuse. SemVer indique clairement, Un numéro de version normal DOIT prendre la forme X.Y.Z [où] X est la version majeure, Y est la version mineure et Z est la version du correctif.

7voto

Farhan Yaseen Points 969

Tilde (~)

La version majeure est corrigée, la version mineure est corrigée, elle correspond à n'importe quelle construction.

"express": "~4.13.3" 

~4.13.3 signifie qu'il vérifiera la présence de la version 4.13.x, où x peut être n'importe quoi, et de la version 4.14.0.

Caret (^)

la version majeure est fixée, correspond à n'importe quelle version mineure, correspond à n'importe quelle construction numéro

"supertest": "^3.0.0"

^3.0.0 signifie qu'il vérifiera la version 3.x.x, où x est n'importe quoi.

0 votes

Pouvez-vous développer en quoi cette réponse est différente de la même réponse postée il y a 4 ans ?

7voto

Semver est séparé en 3 sections majeures qui sont séparées par des points.

major.minor.patch
1.0.0

Ces différentes versions major, minor et patch sont utilisées pour identifier les différentes versions. La marguerite (~) et l'accentuation (^) sont utilisées pour identifier la version mineure et le patch à utiliser dans le versionnement des paquets.

~1.0.1
 Install 1.0.1 or **latest patch versions** such as 1.0.2 ,1.0.5
^1.0.1
 Install 1.0.1 or **latest patch and minor versions** such as 1.0.2 ,1.1.0 ,1.1.1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X