Node.js : quelle est la différence entre npx et npm ?

Lorsque vous installez la plateforme Node.js sur votre ordinateur, des outils sont également installés afin de vous permettre de l'utiliser. C'est notamment le cas de npx et npm. Bien que leurs noms soient proches et que certaines commandes puissent être utilisées avec les deux outils, ce sont deux outils qui n'ont pas le même but, et la même commande lancée avec l'un ou l'autre des outils ne s'utilise pas de la même façon.

npm est le gestionnaire de paquets intégré à un serveur Node.js. npm est donc utilisé pour installer et mettre à jour les paquets déjà installés dans votre projet. npm a la capacité d'exécuter des packages. Si vous utilisez la commande "npm mon-paquet", cela n'exécutera le paquet que s'il a été installé globalement. Vous pouvez donc avoir un message d'erreur pour un paquet installé localement. La solution pour exécuter un paquet local est de saisir le chemin entier vers le paquet. Vous pouvez également utiliser la commande "npm run" pour exécuter un paquet qui a été ajouté à la section "scripts" du fichier "packages.json".

# paquet global
npm paquet-global
# paquet local
npm ./node_modules/.bin/paquet-local
# Lancer un paquet inscrit dans la section "scripts" du fichier "packages.json"
npm run paquet

npx est l'acronyme de Node Package eXecute. C'est un outil spécialement conçu pour l'exécution des paquets. Lorsque vous lancez l'exécution d'un paquet avec cet outil, npx va chercher dans la variable "PATH" de l'ordinateur puis dans les fichiers binaires des modules du projet pour lancer la commande. S'il ne l'a pas trouvé, l'outil est même capable d'aller sur internet chercher la commande et de l'exécuter ensuite. Le paquet est exécuté dans le répertoire en cours. npx peut également être utilisé dans la section "scripts" du fichier "packages.json", afin de mettre des commandes qui lancent un serveur ou une plateforme au démarrage.

# Lance un paquet avec npx (où qu'il soit)
npx mon-paquet
# Dans le fichier "packages.json"
"scripts": {
    "start": "npx gulp@3.9.1",
    "serve": "npx http-server"
}

JavaScript