web-dev-qa-db-fra.com

Quelle est la principale différence entre yarn et npm?

Je veux demander quel est votre gestionnaire de paquets préféré pour JS? J'ai vu des articles sur le fil et NPM. Mais je ne suis pas sûr de ce qui peut être meilleur pour moi. Je viens de commencer à apprendre JS.

En ce moment, la différence entre fil et npm est pour moi comme différence entre les marques de cola.

23
user9772177

Parfois, nous n'avions que npm, mais la résolution des dépendances et la mise en cache posaient tant de problèmes qu'un autre outil est né (yarn). En règle générale, il utilisait le cache local pour résoudre les dépendances. Il était par exemple crucial d’exécuter des travaux CI qui sont presque toujours exécutés dans le même environnement, et une bande passante élevée coûte cher en payant les données dans les services cloud. Cela signifie que dans les anciennes versions npm, lorsque vous exécutiez npm install Et que vous disposiez de dépôts

Première note

S'il vous plaît, comprenez que yarn a été construit sur le dessus de paquets npm et https://www.npmjs.com/ , ce qui signifie qu'ils utilisent tous deux NPM registre pour résoudre les paquets. donc si vous exécutez npm install [email protected]. ou yarn add [email protected]. vous obtiendrez le même résultat

Installation incrémentielle

[email protected]

Sur chaque nouvelle construction, les deux dépendances ont été à nouveau téléchargées sur Internet. Yarn utilise yarn.lock En dessous et compare votre fichier package.json À yarn.lock Et détermine les packages à extraire pour installer uniquement de manière dépendante de nouvelles dépendances.

Multithreading

yarn offre une installation parallèle de paquets qui ne dépendent pas des threads. Cela peut réduire le temps d'installation à 1/10 du temps à partir de npm install

Verrouillage de la version

Comme indiqué précédemment, yarn génère yarn.lock Après chaque installation, ce qui maintient TOUTES les versions des packages installés (comme vous le savez probablement, un package peut avoir des dépendances et une dépendance peut aussi avoir ses propres dépendances) afin de pouvoir construire up infinie arbre de dépendances qui peut conduire à de très mauvais conflits. Imaginons ce scénario

 - lodash^1
 - [email protected]
 - - [email protected]
 - [email protected]
 - - [email protected]

Imaginez un scénario lorsque le responsable de another_module Décide de remplacer lodash par une version de modification 1.2.0, Ce qui peut arriver est que npm pouvait récupérer 2 instances différentes de la même bibliothèque et 2 version différente qui pourrait conduire à un comportement extrêmement étrange. Parce que vous n'avez pas le verrou exact dans votre module (vous acceptez n'importe quelle version semver ^ 1.xx et ^ 2.xx, cela signifie donc que les deux sous-modules satisferont vos exigences, mais vous obtiendrez une version différente. Le fil bloquera votre yarn.lock AT LE TEMPS D'AJOUTER un nouveau package au projet, cela signifie que lorsque les autres développeurs de votre projet extrairont le projet, il aura également les mêmes yarn.lock Et yarn finira par "imiter" l'état du paquet de la façon dont ils ont été installés lorsque vous avez validé yarn.lock Sur d'autres mains NPM se contente de la satisfaction de semver et peut récupérer 2 versions différentes pour 2 développeurs ( en supposant que les paquets sont en train de se mettre à jour)

Note finale

Il y a eu beaucoup de travail de npm comme ils ont publié npm@5 Et je pense que toutes les déclarations sont maintenant des raisons pour lesquelles yarn a été créé et quels problèmes cela a été résolu au début mais je pense qu’à la date actuelle, il n’ya pas de grande différence entre ces 2

31
Milos Mosovsky