153 votes

Quand utiliser Yarn plutôt que NPM ? Quelles sont les différences ?

Quelles sont les différences entre Fils et NPM ? Au moment où j'écris cette question, je ne peux trouver que quelques articles sur Internet montrant quel est l'équivalent en Yarn d'une commande NPM telle que este .

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

17 votes

Ce n'est pas une mauvaise question et elle ne mérite pas un downvote. Cela dit, elle doit être un peu plus étoffée pour devenir une vraie bonne question.

0 votes

Une recherche rapide sur Google permet de trouver este . Je crois que c'est probablement trop large/pas constructif pour StackOverflow et pourrait faire l'objet d'un peu plus de recherche montrée de toute façon.

0 votes

@jedd.ahyoung Je ne sais pas pourquoi j'ai été rejeté ! Je voulais connaître la réponse et je ne la trouvais nulle part sur Internet, alors j'ai demandé !

87voto

msanford Points 740

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

Depuis la version 5, npm

  • génère un 'fichier de verrouillage' appelé package-lock.json qui fixe l'ensemble de votre arbre de dépendances de la même manière que le mécanisme de verrouillage de yarn (ou de tout autre mécanisme),
  • Un outil a été créé
  • --save est maintenant implicite pour npm i
  • Meilleure utilisation du réseau et du cache

Nouvelle présentation de npm 5.7.0 le site npm ci pour installer les dépendances plus rapidement dans un environnement d'intégration continue en n'installant que les paquets trouvés dans le fichier package-lock.json (signalant une erreur si le package-lock.json y package.json ne sont pas synchronisées).

Personnellement J'utilise toujours npm .


Original

Je n'aime pas citer directement les documents, mais ils font un gran d'expliquer pourquoi, de manière suffisamment concise pour que je ne voie 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. machine

  2. Il paralise les opérations qui npm ne le fait pas, et

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

  4. Il peut rendre plus efficace l'utilisation d'autres ressources du système (telles que la RAM) également.

Quelles sont les expériences de production des gens avec ce produit ? 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 de Yarn garantit que l'exécution répétée de yarn sur le même référentiel donne les mêmes paquets.

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

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

Bon article de blog

" NPM vs Yarn Cheat Sheet "par Gant Laborde

Version un peu plus longue du projet :

Rapide : Yarn met en cache tous les paquets qu'il télécharge pour ne plus avoir à le faire. à nouveau. Il parallélise également les opérations pour maximiser l'utilisation des ressources. l'utilisation des ressources afin que les temps d'installation soient plus rapides que jamais.

Fiable : L'utilisation d'un format de fichier de verrouillage détaillé, mais concis, et une algorithme déterministe pour les installations, Yarn est capable de garantir qu'une une installation qui a fonctionné sur un système fonctionnera exactement de la même manière sur tout autre système.

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

Et de le fichier README.md :

  • Mode hors ligne : Si vous avez déjà installé un paquet auparavant, vous pouvez le réinstaller sans connexion Internet.
  • Déterministe : les mêmes dépendances seront installées exactement de la même manière sur chaque machine, quel que soit l'ordre d'installation.
  • Performance du réseau : Yarn met efficacement en file d'attente les demandes et évite les cascades de demandes afin d'optimiser l'utilisation du réseau.
  • Registres multiples : Installez n'importe quel paquet à partir de npm ou de Bower et gardez le même flux de travail pour les paquets.
  • Résilience des réseaux : L'échec d'une seule demande n'entraînera pas l'échec de l'installation. Les demandes sont relancées en cas d'échec.
  • Mode plat : Résolvez les versions non concordantes des dépendances en une seule version pour éviter de créer des doublons.
  • Plus d'emojis.

0 votes

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

3 votes

Plus d'emoji :cat :

8 votes

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

7voto

Mathieu Gemard Points 114

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

npm a été historiquement (2010) le gestionnaire de paquets le plus populaire pour JavaScript. Si vous voulez 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.json fichier. Il contient toutes les dépendances du projet.

Entonces

npm install

créerait un répertoire node_modules et téléchargez les dépendances (que vous avez ajoutées au fichier package.json ) à l'intérieur de celui-ci.

Il créera également un package-lock.json fichier. Ce fichier est utilisé pour décrire l'arbre de dépendances qui a été généré. Il permet aux développeurs d'installer exactement les mêmes dépendances. Par exemple, vous pouvez imaginer qu'un développeur mette à jour une dépendance à la v2 puis à la v3 tandis qu'un autre met directement à jour à la v3.

npm installe les dépendances de manière non déterministe, ce qui signifie que les deux développeurs peuvent avoir une version différente de l'application. node_modules résultant en 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 changeait la propriété des fichiers système, cassant définitivement le système d'exploitation.

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

Vous pouvez ajouter Fils à un projet en tapant :

yarn init

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

yarn install

Un dossier node_modules sera généré. Fils va également générer un fichier appelé yarn.lock . Ce fichier a la même fonction que le fichier package-lock.json mais il est construit à l'aide d'un algorithme déterministe et fiable, ce qui permet d'obtenir des constructions cohérentes.

Si vous avez commencé un projet avec npm vous pouvez en fait migrer vers Fils facilement. Le fil consommera la même package.json . Voir Migrer depuis npm pour plus de détails.

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

6voto

WasiF Points 1943

Qu'est-ce que le PNPM ?

pnpm utilise des liens durs et des liens symboliques pour enregistrer une version d'un module une seule fois sur un disque. En utilisant npm ou Yarn par exemple, si vous avez 100 projets utilisant la même version de lodash, vous aurez 100 copies de lodash sur le disque. Avec pnpm, lodash sera sauvegardé à un seul endroit sur le disque et un hard link le placera dans le node_modules où il doit être installé.

Ainsi, vous économisez des gigaoctets d'espace sur votre disque et vous avez des installations beaucoup plus rapides ! Si vous souhaitez obtenir plus de détails sur la structure unique node_modules créée par pnpm et sur les raisons pour lesquelles elle fonctionne parfaitement avec l'écosystème Node.js, lisez ce petit article : Pourquoi utiliser pnpm ?

Comment installer PNPM ?

npm install -g pnpm

Comment installer un paquet npm à l'aide de PNPM ?

pnpm install -g typescript // or your desired package

Avantages de PNPM sur Yarn y NPM

Voici la barre de progression montrant le temps d'installation pris par NPM , YARN y PNPM (une barre plus courte est préférable) enter image description here

Cliquez pour le repère de contrôle complet

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

4voto

Yogesh Waghmare Points 496

npm :

  1. Le gestionnaire de paquets pour JavaScript. npm est l'interface de la ligne de commande à l'écosystème npm. Il est éprouvé, étonnamment flexible é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 que le fichier de verrouillage de Yarn peut être corrompu dans certains cas. corrompu dans certains cas et doit être corrigé avec yarn-tools.

Fils :

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

4voto

Daniel Danielecki Points 118

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

Fils

Vous pouvez les vérifier en utilisant yarn audit Cependant, vous ne pouvez pas les réparer. Il s'agit toujours d'un problème ouvert sur un site GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ).

npm

Vous pouvez utiliser npm audit fix donc vous pouvez en réparer certains vous-même.

Les deux, c'est-à-dire npm audit & yarn audit ont 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 (n'ont pas été utilisés).

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