Dans le développement d’applications modernes, nous n’écrivons pas tout à partir de zéro. Au lieu de cela, nous préférons utiliser des paquets open-source existants. Chacun de ces paquets a ses propres mainteneurs et sa propre communauté. Ainsi, l’utilisation d’un package dans nos projets nous donne des avantages tels qu’un développement plus rapide, un accès à de nouvelles mises à jour régulières et une meilleure sécurité que les scripts créés sur mesure.
Il est courant qu’un paquet dépend de nombreux autres paquets pour fonctionner correctement. De même, lodash peut également dépendre de quelque chose comme lodash, mais lodash lui-même dépend également de plusieurs paquets. En d’autres termes, les dépendances imbriquées peuvent parfois devenir si complexes qu’elles ne peuvent pas gérer manuellement la gestion des dépendances.
Voici quand un gestionnaire de paquets est extrêmement utile. Les gestionnaires de paquets sont des outils qui gèrent automatiquement les dépendances d’un projet.
Par exemple, un gestionnaire de paquets peut installer de nouveaux paquets ou mettre à jour des paquets existants avec une seule commande. Parce que tout est automatisé, il n’y a donc aucune chance d’erreur humaine. En tant que développeurs JavaScript, nous avons accès à plusieurs gestionnaires de paquets. Mais, dans ce guide, nous comparerons les trois plus populaires :
- npm
- Yarn
- pnpm
- Aperçu des gestionnaires de paquets
- Caractéristiques de npm, Yarn et pnpm
- Avantages de npm:
- Avantages de Yarn:
- Avantages de pnpm:
- Comparaison du gestionnaire de paquets
- Facilité d’utilisation
- Vitesse
- Sécurité
- Stabilité
- Prise en charge des monorepos
- Déterministe – le fichier de verrouillage
- Conclusion
- LogRocket: Déboguer les erreurs JavaScript plus facilement en comprenant le contexte
Aperçu des gestionnaires de paquets
npm a été le premier gestionnaire de paquets à introduire les concepts de protocole de registre et de normes d’emballage. Il a été publié en 2010 et officiellement adopté par le nœud.l’équipe js peu de temps après, ce qui a été le tournant pour npm.
Après le succès massif de Node.js, npm a également reçu l’adhésion de la communauté des développeurs. Il propose un registre en ligne pour les packages JavaScript ainsi qu’un outil de ligne de commande qui fonctionne avec le registre pour installer et mettre à jour les dépendances.
Mais il y a peu d’inconvénients de npm qui ont déclenché le développement de Yarn et pnpm. Par exemple, npm est nettement plus lent que ses homologues. Il a également des antécédents de graves failles de sécurité.
Ainsi, les grandes entreprises technologiques comme Facebook et Google hésitaient à continuer à utiliser npm. À leur tour, ils ont uni leurs efforts pour développer une meilleure version de npm et l’appeler Yarn. Pendant ce temps, le développeur ukrainien Zoltan Kochan a développé pnpm.
Caractéristiques de npm, Yarn et pnpm
Tous ces gestionnaires de paquets sont open-source, ce qui signifie que vous avez un accès complet pour vérifier le fonctionnement interne de chacun. Parfois, c’est même une exigence dans le développement d’applications au niveau de l’entreprise.
Avantages de npm:
- Génère automatiquement un fichier
package-lock.json
. Il est utile de s’engager dans un système de contrôle de version. De cette façon, d’autres développeurs peuvent facilement installer les dépendances sur leurs machines locales - Gérer facilement les dépendances locales ou globales
- npm est bien équipé pour gérer plusieurs versions de dépendances
- Il dispose d’un registre officiel qui contient plus de paquets que pypi, rubygems ou packagist
Avantages de Yarn:
- Yarn corrige de nombreux problèmes qui apparaissent dans un Monorepo. Par exemple, si vous gérez plusieurs paquets sous le même référentiel et qu’ils ont tous un fichier
package.json
séparé, vous pouvez facilement mettre à jour tous les paquets avec Yarn, grâce à son concept d’espaces de travail qui peuvent installer les dépendances de tous les paquets dans un référentiel, le tout en une seule fois. Avec npm, vous devez exécuter la commandenpm install
manuellement dans chaque dossier de paquets. - Yarn utilise un mécanisme de cache hors ligne, ce qui signifie que lorsque vous installez un package pour la première fois, Yarn l’ajoute à un dossier de cache sous
~/.yarn-cache
. Ainsi, la prochaine fois que vous aurez besoin de ce package, Yarn le récupérera du cache local au lieu de faire une requête HTTP au serveur. Cette petite amélioration augmente considérablement les performances de Yarn par rapport à npm - Yarn utilise également un fichier de verrouillage appelé
yarn.lock
, de sorte que vos projets fonctionneront correctement pour tous les coéquipiers. Ce concept est également appelé algorithme d’installation déterministe - Il est doté d’un vérificateur de licences intégré qui peut être pratique dans différents scénarios lorsque vous développez des applications
- Contrairement à npm, Yarn utilise une approche appelée téléchargements parallèles. Il permet à Yarn d’utiliser plus de ressources pour accélérer le processus de génération
- Il peut automatiquement réessayer la requête HTTP en cas d’échec. Cette fonctionnalité est particulièrement utile lorsque vous rencontrez des problèmes Internet temporaires
Avantages de pnpm:
- Il est compatible avec npm mais offre également une utilisation et une vitesse nettement meilleures de l’espace disque
- pnpm installe tous les paquets sur un seul emplacement, puis utilise des liens symboliques pour les référencer. Il introduit un concept complètement nouveau appelé système de stockage adressable au contenu qui permet à pnpm de détecter la différence entre les fichiers. À son tour, il ne duplique pas les fichiers inchangés dans deux versions différentes d’un paquet
- Sa dernière version, 5.8.0, introduit un nouveau paramètre de type Yarn-bash appelé shell-emulator, un environnement shell multiplateforme
- pnpm a un mécanisme de contrôle d’accès strict, ce qui signifie qu’un paquet ne peut accéder qu’aux dépendances définies dans son
package.json
fichier
Comparaison du gestionnaire de paquets
Facilité d’utilisation
npm, Yarn et pnpm offrent des commandes presque identiques pour leurs différentes fonctions opérations, et ils sont tous faciles à utiliser. Voici un exemple de leurs commandes couramment utilisées:
npm | Fil | pnpm |
---|---|---|
installation npm | installation yarn | installation pnpm |
mise à niveau yarn | mise à jour pnpm |
Vitesse
Il n’y a pas de correspondance avec pnpm en ce qui concerne la vitesse et les performances de ces gestionnaires de paquets. Selon un benchmark de différents cas d’utilisation, pnpm a montré des vitesses de performance jusqu’à 3 fois plus rapides que npm.
Les vitesses du fil et du npm sont comparables. Dans certains cas, le fil a un avantage significatif sur le npm, mais il existe des scénarios où le npm est un choix plus approprié. Par exemple, si nous effectuons une opération d’installation en utilisant simplement la fonctionnalité node_modules
et en ignorant la fonctionnalité cache
et lock file
, npm pourrait offrir une vitesse 5 fois supérieure. De même, si nous utilisons les trois fonctionnalités, Yarn pourrait augmenter ses performances et devenir 11 fois plus rapide que npm.
Sécurité
L’avantage majeur de Yarn par rapport à npm est qu’il vérifie l’intégrité de chaque paquet à l’aide de sommes de contrôle. Le processus de vérification est effectué avant d’exécuter n’importe quel code du paquet, de sorte qu’il écarte toute possibilité de vulnérabilité de détournement de paquet.
D’un autre côté, npm est un peu plus indulgent lorsqu’il s’agit de travailler avec de mauvais paquets. Il évolue encore afin d’offrir les meilleures pratiques en matière de sécurité. Mais, npm a généralement une mauvaise réputation en termes de sécurité.
Dans le passé, il y avait des failles de sécurité dans npm qui affectaient directement de nombreux projets. Par exemple, dans npm version 5.7.0, lorsque vous exécutez la commande sudo npm
sur un système d’exploitation basé sur Linux, il était possible de changer la propriété des fichiers système, rendant le système d’exploitation inutilisable.
De même, un autre incident de vol de bitcoins s’est produit en 2018. Fondamentalement, le nœud populaire.le package js EventStream a ajouté une dépendance malveillante flatmap-stream
dans sa version 3.3.6. Ce paquet malveillant était emballé avec une charge utile cryptée qui tente de voler des bitcoins de la machine du développeur.
pnpm combine les attributs positifs de npm et de Yarn pour offrir une sécurité encore meilleure. Il implémente également un mécanisme de contrôle d’accès strict qui lie un paquet pour n’utiliser que ses propres dépendances définies dans son fichier package.json
.
Stabilité
npm, Yarn et pnpm ont connu plusieurs phases au cours des dernières années. Au fil du temps, leur base de code a mûri parce qu’ils ont reçu des tonnes de contributions de la communauté open source.
Et, avec le temps, de nouveaux concepts et idées apparaissent qui pourraient introduire des changements révolutionnaires. Au moment de la rédaction de ce guide, tous ces gestionnaires de paquets sont en bon état et vous pouvez les utiliser dans vos projets sans aucun problème.
Yarn est soutenu par Facebook et Google, npm est soutenu par Microsoft et Node.js et pnpm sont principalement développés par un individu, bien qu’il compte maintenant plus de 75 contributeurs — vous pouvez donc compter sur ces gestionnaires de paquets pour créer votre prochain projet.
Prise en charge des monorepos
Les monorepos sont principalement préférés par les grandes entreprises technologiques pour stocker et gérer leurs bases de code massives. npm n’a été conçu que pour gérer des projets individuels. Pour l’instant, il n’a aucune fonctionnalité pour prendre en charge monorepos. Mais Yarn et pnpm ont tous deux un support complet pour les monorepos, grâce à leur concept d’espaces de travail.
Déterministe – le fichier de verrouillage
Les trois gestionnaires de paquets sont emballés avec les fonctionnalités du fichier de verrouillage. Il permet à différents développeurs d’installer exactement la même copie du projet. npm utilise un fichier package-lock.json
, Yarn utilise yarn.lock
et pnpm utilise pnpm-lock.yaml
.
Conclusion
Si vous recherchez une solution qui vous donne une meilleure vitesse et une utilisation efficace de la mémoire, vous devriez fortement envisager d’utiliser pnpm.
Si vous manipulez des monorepos, vous pouvez utiliser pnpm ou Yarn pour le faire. Cependant, gardez à l’esprit que Yarn envoie des données d’utilisation à Facebook, ce qui peut ne pas faire de Yarn un choix approprié dans certains scénarios.
Yarn ne prend pas non plus en charge la version 5 de Node.js. À cet égard, npm est une option préférée pour Node.projets basés sur js car il est recommandé par le nœud.équipe js. Ces jours-ci, Node.js est livré avec npm par défaut.
Avec npm, vous devez considérer son historique avec des problèmes de sécurité, ce qui a déclenché le développement de Yarn, qui a également été créé pour résoudre de nombreux émetteurs présents dans npm. Donc, si vous êtes préoccupé par la sécurité de vos projets, envisagez d’utiliser Yarn au lieu de npm.
LogRocket: Déboguer les erreurs JavaScript plus facilement en comprenant le contexte
Le code de débogage est toujours une tâche fastidieuse. Mais plus vous comprenez vos erreurs, plus il est facile de les corriger.
LogRocket vous permet de comprendre ces erreurs de manière nouvelle et unique. Notre solution de surveillance frontend suit l’engagement des utilisateurs avec vos frontend JavaScript pour vous permettre de savoir exactement ce que l’utilisateur a fait qui a conduit à une erreur.
LogRocket enregistre les journaux de console, les temps de chargement des pages, les traces de piles, les requêtes / réponses réseau lentes avec en-têtes + corps, les métadonnées du navigateur et les journaux personnalisés. Comprendre l’impact de votre code JavaScript ne sera jamais aussi facile !
Essayez-le gratuitement.