npm vs npx - Quelle est la différence?

Si vous avez déjà utilisé Node.js, vous devez avoir utilisé npm à coup sûr.

npm (node ​​package manager) est le gestionnaire de dépendances / packages que vous sortez de la boîte lorsque vous installez Node.js. Il permet aux développeurs d'installer des packages à la fois globalement et localement.

Parfois, vous voudrez peut-être jeter un œil à un package spécifique et essayer quelques commandes. Mais vous ne pouvez pas faire cela sans installer les dépendances dans votre node_modulesdossier local .

C'est là que npx entre en jeu.

Dans cet article, nous allons examiner les différences entre npm et npx et apprendre à tirer le meilleur parti des deux.

Tout d'abord, comprenons ce qu'est réellement npm et ce que nous pouvons en faire.

npm le gestionnaire de paquets

npm est un couple de choses. Il s'agit avant tout d'un référentiel en ligne pour la publication de projets open-source Node.js.

Deuxièmement, c'est un outil CLI qui vous aide à installer ces packages et à gérer leurs versions et dépendances. Il existe des centaines de milliers de bibliothèques et d'applications Node.js sur npm et de nombreuses autres sont ajoutées chaque jour.

npm par lui-même n'exécute aucun package. Si vous souhaitez exécuter un package à l'aide de npm, vous devez spécifier ce package dans votre package.jsonfichier.

Lorsque les exécutables sont installés via des packages npm, npm crée des liens vers eux:

  • les installations locales ont des liens créés dans le ./node_modules/.bin/répertoire
  • les installations globales ont des liens créés à partir du bin/répertoire global (par exemple: /usr/local/binsous Linux ou %AppData%/npmsous Windows)

Pour exécuter un package avec npm, vous devez soit taper le chemin local, comme ceci:

$ ./node_modules/.bin/your-package

ou vous pouvez exécuter un package installé localement en l'ajoutant à votre package.jsonfichier dans la section scripts, comme ceci:

{ "name": "your-application", "version": "1.0.0", "scripts": { "your-package": "your-package" } }

Ensuite, vous pouvez exécuter le script en utilisant npm run:

npm run your-package

Vous pouvez voir que l'exécution d'un paquet avec npm simple nécessite un peu de cérémonie.

Heureusement, c'est là que npx est utile.

npx le package runner

Depuis la version 5.2.0 de npm, npx est pré-fourni avec npm. C'est donc à peu près une norme de nos jours.

npx est également un outil CLI dont le but est de faciliter l'installation et la gestion des dépendances hébergées dans le registre npm.

Il est maintenant très facile d'exécuter toute sorte d'exécutable basé sur Node.js que vous installeriez normalement via npm.

Vous pouvez exécuter la commande suivante pour voir si elle est déjà installée pour votre version actuelle de npm:

$ which npx

Si ce n'est pas le cas, vous pouvez l'installer comme ceci:

$ npm install -g npx

Une fois que vous vous êtes assuré de l'avoir installé, voyons quelques-uns des cas d'utilisation qui rendent npx extrêmement utile.

Exécutez facilement un package installé localement

Si vous souhaitez exécuter un package installé localement, il vous suffit de taper:

$ npx your-package

npx vérifiera si ou existe dans $PATHou dans les binaires du projet local, et si c'est le cas, il l'exécutera.

Exécuter des packages qui ne sont pas déjà installés

Un autre avantage majeur est la possibilité d'exécuter un package qui n'a pas été installé auparavant.

Parfois, vous voulez simplement utiliser certains outils CLI, mais vous ne voulez pas les installer globalement juste pour les tester. Cela signifie que vous pouvez économiser de l'espace disque et ne les exécuter que lorsque vous en avez besoin. Cela signifie également que vos variables globales seront moins polluées.

Exécutez le code directement depuis GitHub

exécuter-gist-script-avec-npx

Celui-ci est plutôt génial.

Vous pouvez utiliser npx pour exécuter tous les gists et référentiels GitHub. Concentrons-nous sur l'exécution d'un gist GitHub car il est plus facile d'en créer un.

Le script le plus basique se compose du fichier JS principal et d'un fichier package.json. Après avoir configuré les fichiers, tout ce que vous avez à faire est d'exécuter le npx avec le lien vers cet élément essentiel, comme indiqué dans l'image ci-dessus.

Ici vous pouvez trouver le code que j'ai utilisé pour cet exemple.

Assurez-vous de lire attentivement tout script avant de l'exécuter pour éviter de graves problèmes pouvant survenir en raison d'un code malveillant.

Tester différentes versions de package

npx facilite grandement le test de différentes versions d'un package ou d'un module Node.js. Pour tester cette fonctionnalité géniale, nous allons installer localement le create-react-apppackage et tester une version à venir.

Cela listera quelques balises dist vers la fin de la sortie. Les balises Dist fournissent des alias pour les numéros de version, ce qui facilite grandement la saisie.

$ npm v create-react-app
create-react-app-dist-tags

Utilisons npx pour essayer la nextbalise dist create-react-appqui créera l'application dans un répertoire sandbox.

$ npx [email protected] sandbox

npx installera temporairement la prochaine version de create-react-app, puis il s'exécutera pour échafauder l'application et installer ses dépendances.

Une fois installé, nous pouvons accéder à l'application comme ceci:

$ cd sandbox

puis démarrez-le avec cette commande:

$ npm start
create-react-app-npx-prochaine-version

Il ouvrira automatiquement l'application React dans la fenêtre de votre navigateur par défaut.

Maintenant, nous avons une application qui fonctionne sur la prochaine version du create-react-apppackage!

index-page-react-app

Conclusion

npx nous aide à éviter les versions, les problèmes de dépendance et l'installation de packages inutiles que nous voulons juste essayer.

Il fournit également un moyen clair et simple d'exécuter des packages, des commandes, des modules et même des gists et des référentiels GitHub.

Si vous n'avez jamais utilisé npx auparavant, c'est le bon moment pour commencer!

Cela a été initialement publié sur mon blog.

Vous pouvez me contacter et me demander n'importe quoi sur Twitter et Facebook.