Quand utiliser Yarn over NPM? Quelles sont les différences?


101

Quelles sont les différences entre Yarn et NPM? Au moment de la rédaction de cette question, je ne peux trouver que quelques articles sur Internet montrant quel est l'équivalent Yarn d'une commande NPM comme celle-ci .

Ont-ils les mêmes fonctionnalités (je sais que Yarn fait la mise en cache locale et semble que vous n'avez besoin de télécharger un package qu'une seule fois), mais à part cela, y a-t-il des avantages à passer de NPM à Yarn?


11
Ce n'est pas une mauvaise question et ne mérite pas un vote défavorable. Cela dit, il doit être un peu étoffé pour en faire une vraiment bonne question.
jedd.ahyoung

Un rapide Google révèle cela . Je pense que c'est probablement trop large / pas constructif pour StackOverflow et que cela pourrait de toute façon faire avec un peu plus de recherche.
Aurora0001

1
@ Aurora0001 quand j'ai cherché j'ai vu la feuille de triche mais ce n'est pas la réponse à ma question! Je veux connaître les différences entre les deux et non les différences entre les commandes. S'il vous plaît lire ma question d'abord
Asha

4
@Asha Vous devriez modifier votre question pour avoir plus de détails et montrer ce que vous avez déjà recherché. Quel genre de différences cherchez-vous? Essayez-vous de savoir comment les bibliothèques sont implémentées? Essayez-vous de découvrir en quoi ils diffèrent dans leur approche du problème? Si vous précisez votre question, cela peut être bon, selon ce que vous demandez. (Selon ce que vous demandez, les informations peuvent déjà être disponibles sur Google.)
jedd.ahyoung

3
des gens drôles vous disent de google; J'ai trouvé votre question sur google ... les gens dans stackoverflow aiment trop exclure les choses, comme si cela les rendrait plus importantes, je suppose.
jairhumberto

Réponses:


68

MISE À JOUR: mars 2018 (un peu tard ...)

Depuis la version 5, npm

  • génère un 'lockfile' appelé package-lock.jsonqui corrige l'intégralité de votre arbre de dépendances de la même manière que le mécanisme de verrouillage de fil (ou tout autre),
  • Un outil a été fait
  • --save est maintenant implicite pour npm i
  • Meilleure utilisation du réseau et du cache

npm 5.7.0 a en outre introduit la npm cicommande pour installer les dépendances plus rapidement dans un environnement d'intégration continue en installant uniquement les packages trouvés dans package-lock.json(signalant une erreur si les package-lock.jsonet package.jsonne sont pas synchronisés).

Personnellement , je l'utilise toujours npm.


Original

Je répugne à citer directement des documents, mais ils font un excellent travail pour expliquer pourquoi, de manière suffisamment concise pour que je ne vois pas comment résumer davantage les idées.

En grande partie:

  1. Vous savez toujours que vous obtenez la même chose sur chaque machine de développement

  2. Il paralellise les opérations qui npmne le font pas, et

  3. Il permet une utilisation plus efficace du réseau.

  4. Il peut également utiliser plus efficacement d'autres ressources système (telles que la RAM) .

Quelles sont les expériences de production des gens avec? Qui sait, c'est un bébé pour le grand public.

TL; DR de Yehuda Katz :

Dès le départ, le fichier de verrouillage Yarn garantit que l'exécution répétée de yarn sur le même référentiel aboutit aux mêmes packages.

Deuxièmement, Yarn tente d'avoir de bonnes performances, avec un cache froid, mais surtout avec un cache chaud.

Enfin, Yarn fait de la sécurité une valeur fondamentale.

Bel article de blog

« Aide-mémoire NPM vs Yarn » par Gant Laborde

Version légèrement plus longue du projet :

Rapide: Yarn met en cache chaque package qu'il télécharge pour ne plus jamais avoir besoin de le faire. Il met également en parallèle les opérations pour maximiser l'utilisation des ressources afin que les temps d'installation soient plus rapides que jamais.

Fiable: En utilisant un format de fichier de verrouillage détaillé, mais concis, et un algorithme déterministe pour les installations, Yarn est en mesure de garantir qu'une installation qui a fonctionné sur un système fonctionnera exactement de la même manière sur n'importe quel autre système.

Secure: Yarn utilise des sommes de contrôle pour vérifier l'intégrité de chaque package installé avant que son code ne soit exécuté.

Et depuis le README.md :

  • Mode hors ligne: si vous avez déjà installé un package, vous pouvez le réinstaller sans connexion Internet.
  • Déterministe: les mêmes dépendances seront installées de la même manière sur chaque machine, quel que soit l'ordre d'installation.
  • Performances du réseau: Yarn met efficacement les demandes en file d'attente et évite les chutes d'eau des demandes afin de maximiser l'utilisation du réseau.
  • Registres multiples: installez n'importe quel package à partir de npm ou de Bower et conservez le même flux de travail de package.
  • Résilience du réseau: une seule demande échouant ne provoquera pas l'échec d'une installation. Les demandes sont retentées en cas d'échec.
  • Mode plat: résolvez les versions incompatibles des dépendances en une seule version pour éviter de créer des doublons.
  • Plus d'emojis. 🐈

Pouvez-vous me dire si le fil fait une résolution de dépendance comme le fait npm v3 ? Je comprends qu'il existe une --flatoption qui force une véritable structure plate où une seule version de chaque dépendance est autorisée à être installée, mais quel est le comportement par défaut à ce sujet? Merci.
Dimitris Karagiannis

2
Plus d'emoji: chat:
Huei Tan

7
Excellente réponse. Je me demande s'ils ont essayé de contribuer à npm avant de bifurquer, de renommer et de changer la syntaxe de install -g.
Gardner Bickford


2

npm :

  1. Le gestionnaire de packages pour JavaScript. npm est l'interface de ligne de commande de l'écosystème npm. Il est testé au combat, étonnamment flexible et utilisé par des centaines de milliers de développeurs JavaScript chaque jour.
  2. NPM génère un fichier de verrouillage correct alors qu'un fichier de verrouillage Yarn peut être corrompu dans certains cas et doit être corrigé avec yarn-tools

Fil :

  1. Un nouveau gestionnaire de packages pour JavaScript. Yarn met en cache chaque package qu'il télécharge pour ne plus jamais avoir besoin de le faire. Il met également en parallèle les opérations pour maximiser l'utilisation des ressources afin que les temps d'installation soient plus rapides que jamais.
  2. Yarn ne prend pas en charge la connexion avec un mot de passe (contrairement à NPM)

1
quel genre de connexions?
Rich Stone le

2

Qu'est-ce que PNPM?

pnpmutilise des liens physiques et des liens symboliques pour enregistrer une seule version d'un module une seule fois sur un disque. Lorsque vous utilisez npm ou Yarn par exemple, si vous avez 100 projets utilisant la même version de lodash, vous aurez 100 copies de lodash sur disque. Avec pnpm, lodash sera enregistré en un seul endroit sur le disque et un lien dur le placera dans les node_modules où il devrait être installé.

En conséquence, vous économisez des gigaoctets d'espace sur votre disque et vous avez des installations beaucoup plus rapides! Si vous souhaitez plus de détails sur la structure unique node_modules créée par pnpm et pourquoi cela fonctionne bien avec l'écosystème Node.js, lisez ce petit article: Pourquoi devrions-nous utiliser pnpm?

Comment installer PNPM?

npm install -g pnpm

Comment installer le package npm en utilisant PNPM?

pnpm install -g typescript // or your desired package

Avantages de PNPMplus YarnetNPM

Voici la barre de progression montrant le temps d'installation pris par NPM, YARNet PNPM(une barre plus courte est meilleure) entrez la description de l'image ici

Cliquez pour vérifier le Benchmark complet

pour plus de détails, visitez https://www.npmjs.com/package/pnpm


1

Lorsque vous installez un package en utilisant Yarn (en utilisant yarn add packagename), il place le package sur votre disque . Lors de la prochaine installation, ce package sera utilisé au lieu d'envoyer une requête HTTP pour obtenir l'archive tar du registre.

Yarn est livré avec un vérificateur de licence pratique , qui peut devenir très puissant au cas où vous deviez vérifier les licences de tous les modules dont vous dépendez.

Si vous travaillez sur un logiciel propriétaire, peu importe celui que vous utilisez. Avec npm, vous pouvez utiliser npm-shrinkwrap.js, tandis que vous pouvez utiliser yarn.lock avec Yarn.

Pour plus d'informations, veuillez lire le blog suivant

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/


1

Essayer de donner une meilleure vue d'ensemble pour les débutants.

npm a été historiquement (2010) le gestionnaire de packages le plus populaire pour JavaScript. Si vous souhaitez l'utiliser pour gérer les dépendances de votre projet, vous pouvez taper la commande suivante:

npm init

Cela générera un package.jsonfichier. Il contient toutes les dépendances du projet.

ensuite

npm install

créerait un répertoire node_moduleset téléchargerait les dépendances (que vous avez ajoutées au package.jsonfichier) à l'intérieur.

Cela créera également un package-lock.jsonfichier. Ce fichier est utilisé pour décrire l'arborescence des dépendances qui a été générée. Il permet aux développeurs d'installer exactement les mêmes dépendances. Par exemple, vous pouvez imaginer un développeur mettant à niveau une dépendance vers la v2, puis la v3, tandis qu'un autre procédant directement à la mise à niveau vers la v3.

npm installe les dépendances de manière non déterministe, ce qui signifie que les deux développeurs pourraient avoir un node_modulesrépertoire différent entraînant des comportements différents . ** npm a souffert d'une mauvaise réputation comme par exemple en février 2018: un problème a été découvert dans la version 5.7.0 dans lequel l'exécution de sudo npm sur les systèmes Linux changerait la propriété des fichiers système, brisant définitivement le système d'exploitation.

Pour résoudre ces problèmes et bien d'autres, Facebook a introduit un nouveau gestionnaire de packages (2016): Yarn un gestionnaire de packages plus rapide, plus sécurisé et plus fiable pour JavaScript.

Vous pouvez ajouter Yarn à un projet en tapant:

yarn init

Cela créera un package.jsonfichier. Ensuite, installez les dépendances avec:

yarn install

Un dossier node_modulessera généré. Yarn générera également un fichier appelé yarn.lock. Ce fichier a le même objectif que le package-lock.jsonmais est plutôt construit à l'aide d'un algorithme déterministe et fiable conduisant ainsi à des constructions cohérentes.

Si vous avez démarré un projet avec npm , vous pouvez en fait migrer facilement vers Yarn . le fil consommera la même chose package.json. Voir Migrer depuis npm pour plus de détails.

Cependant, npm a été amélioré à chaque nouvelle version et certains projets utilisent toujours npm sur fil .


1

La réponse de @msanford couvre presque tout, cependant, il me manque la partie sécurité (vulnérabilités connues de l'OWASP).

Fil

Vous pouvez les vérifier à l'aide yarn audit, cependant, vous ne pouvez pas les corriger. C'est toujours un problème ouvert sur un GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ).

npm

Vous pouvez utiliser npm audit fix, donc certains d'entre eux peuvent être résolus vous-même.

Les deux, c'est-à-dire npm audit& yarn auditont leurs propres outils d'intégration continue. Ce sont respectivement https://github.com/IBM/audit-ci (utilisé, fonctionne très bien!) Et https://yarnpkg.com/package/audit-ci (non utilisé).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.