Aujourd'hui, dans la cinquième partie de la traduction du manuel Node.js, nous terminerons l'analyse des fonctionnalités de npm, en particulier, nous aborderons des questions telles que la recherche des versions installées des packages npm, l'installation des anciennes versions des packages, la mise à jour des dépendances, la désinstallation locale et globale des packages. Ici, nous parlons de npx.

[Nous vous conseillons de lire] Autres parties du cyclePartie 1:
Informations générales et mise en routePartie 2:
JavaScript, V8, quelques astuces de développementPartie 3:
Hébergement, REPL, travailler avec la console, les modulesPartie 4:
fichiers npm, package.json et package-lock.jsonPartie 5:
npm et npxPartie 6:
boucle d'événements, pile d'appels, temporisateursPartie 7:
Programmation asynchronePartie 8:
Guide Node.js, Partie 8: Protocoles HTTP et WebSocketPartie 9:
Guide Node.js, partie 9: utilisation du système de fichiersPartie 10:
Guide Node.js, Partie 10: Modules standard, flux, bases de données, NODE_ENVPDF complet du guide Node.js Recherche des versions des packages npm installés
Afin de découvrir les versions de tous les packages npm installés dans le dossier du projet, y compris leurs dépendances, exécutez la commande suivante:
npm list
Par conséquent, par exemple, les résultats suivants peuvent se produire:
> npm list /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 ├── get-stdin@5.0.1 ├─┬ optimist@0.6.1 │ ├── minimist@0.0.10 │ └── wordwrap@0.0.3 ├─┬ string-width@2.1.1 │ ├── is-fullwidth-code-point@2.0.0 │ └─┬ strip-ansi@4.0.0 │ └── ansi-regex@3.0.0 └── strip-eof@1.0.0
Vous pouvez découvrir la même chose en consultant le
package-lock.json
projet, mais l'arborescence que la commande ci-dessus affiche est plus pratique Ă afficher.
Afin d'obtenir une liste similaire de packages installés globalement, vous pouvez utiliser la commande suivante:
npm list -g
Vous pouvez afficher uniquement les informations sur les packages de niveau supérieur locaux (c'est-à -dire ceux que vous avez installés vous-même et répertoriés dans
package.json
) comme suit:
npm list
Par conséquent, si, par exemple, vous avez installé uniquement le package cowsay, les éléments suivants s'affichent:
> npm list
Pour connaître la version d'un package spécifique, utilisez la commande suivante:
npm list cowsay
À la suite de sa mise en œuvre, nous obtenons environ les éléments suivants:
> npm list cowsay /Users/flavio/dev/node/cowsay └── cowsay@1.3.1
Cette commande convient également pour trouver les versions de dépendance des packages que vous avez installés. Dans ce cas, le nom du package de dépendances agit comme le nom du package qui lui a été transmis, et la sortie de la commande ressemblera à ceci:
> npm list minimist /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 └─┬ optimist@0.6.1 └── minimist@0.0.10
Une entrée sur le package de dépendance dans cette structure sera mise en évidence.
Si vous voulez savoir quel est le numéro de la dernière version d'un package disponible dans le référentiel npm, vous aurez besoin d'une commande du formulaire suivant:
npm view [package_name] version
En réponse, elle émet le numéro de version du package:
> npm view cowsay version 1.3.1
Installation des anciennes versions des packages npm
L'installation d'une ancienne version du package npm peut être nécessaire pour résoudre les problèmes de compatibilité. Vous pouvez installer la version requise du package à partir de npm en utilisant la construction suivante:
npm install <package>@<version>
Dans le cas du package cowsay que nous utilisons comme exemple, la
install cowsay
npm
install cowsay
installera sa dernière version (1.3.1 au moment de la rédaction de ce document). Si vous devez installer sa version 1.2.0, utilisez cette commande:
npm install cowsay@1.2.0
Vous pouvez spécifier des versions en installant des packages globaux:
npm install -g webpack@4.16.4
Si vous avez besoin de savoir quelles versions d'un package sont disponibles dans npm, vous pouvez le faire Ă l'aide de cette construction:
npm view <package> versions
Voici un exemple du résultat de son travail:
> npm view cowsay versions [ '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.1.0', '1.1.1', '1.1.2', '1.1.3', '1.1.4', '1.1.5', '1.1.6', '1.1.7', '1.1.8', '1.1.9', '1.2.0', '1.2.1', '1.3.0', '1.3.1' ]
Mise à jour des dépendances du projet vers leurs dernières versions
Lorsque vous installez un package avec une commande de type
npm install <packagename>
, la dernière version est téléchargée à partir du référentiel et placée dans le dossier
node_modules
. Dans ce cas, les entrées correspondantes sont ajoutées aux
package-lock.json
package.json
et
package-lock.json
situés dans le dossier du projet.
De plus, en installant un package, npm recherche et installe ses dépendances.
Supposons que nous installions le package cowsay familier en exécutant la
npm install cowsay
. Le package sera installé dans le dossier
node_modules
du projet et l'entrée suivante se trouvera dans le fichier
package.json
:
{ "dependencies": { "cowsay": "^1.3.1" } }
package-lock.json
contiendra également des informations sur ce package. En voici un fragment:
{ "requires": true, "lockfileVersion": 1, "dependencies": { "cowsay": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz", "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkMAjufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==", "requires": { "get-stdin": "^5.0.1", "optimist": "~0.6.1", "string-width": "~2.1.1", "strip-eof": "^1.0.0" } } } }
À partir de ces deux fichiers, vous pouvez découvrir que nous avons installé la version 1.3.1 de cowsay et que la règle de mise à jour du package est spécifiée comme
^1.3.1
. Dans la quatrième partie de cette série de matériaux, nous avons déjà parlé des règles du versioning sémantique. Rappelez-vous que cette entrée signifie que npm peut mettre à jour le package lorsque ses versions mineures et correctives sont publiées.
Si, par exemple, une nouvelle version mineure d'un package sort et que nous
npm update
commande
npm update
, la version installée du package est mise à jour et les informations sur le package installé sont mises à jour dans le fichier
package-lock.json
et le fichier
package.json
reste inchangé.
Afin de savoir si de nouvelles versions des packages utilisés dans le projet ont été publiées, vous pouvez utiliser la commande suivante:
npm outdated
Voici les résultats de cette commande pour un projet dont les dépendances n'ont pas été mises à jour depuis longtemps:
Analyse des dépendances de projet obsolètesCertaines des mises à jour de packages disponibles sont leurs versions principales, dont les mises à jour ne se produiront pas lorsque la commande
npm update
sera exécutée. La mise à niveau vers les versions majeures par cette équipe n'est pas effectuée, car ils (par définition) peuvent contenir des modifications majeures qui ne se distinguent pas par une compatibilité descendante avec les versions majeures précédentes, et npm cherche à éviter au développeur des problèmes pouvant entraîner l'utilisation de ces packages.
Afin de passer à de nouvelles versions majeures de tous les packages utilisés, installez globalement le package
npm-check-updates
:
npm install -g npm-check-updates
Exécutez ensuite l'utilitaire fourni par lui:
ncu -u
Cette commande mettra Ă jour le fichier
package.json
, apportant des modifications aux instructions pour les versions de package appropriées dans les
devDependencies
dependencies
et
devDependencies
. Cela permettra à npm de mettre à jour les packages utilisés dans le projet vers de nouvelles versions majeures après avoir exécuté la commande
npm update
.
Si vous souhaitez installer les dernières versions de package pour le projet que vous venez de télécharger, qui n'a pas encore le dossier
node_modules
, puis, au lieu de la
npm update
, exécutez la commande
npm install
.
Désinstallation locale ou globale des packages
Pour désinstaller un package précédemment installé localement (à l'aide de la commande
install <package-name>
), exécutez une commande qui ressemble à ceci:
npm uninstall <package-name>
Si le package est installé globalement, vous devrez utiliser l'
(--global
-g
(--global
) pour le supprimer. Par exemple, une commande similaire pourrait ressembler Ă ceci:
npm uninstall -g webpack
Lors de l'exécution d'une telle commande, le dossier actuel n'a pas d'importance.
A propos du choix entre l'installation globale et locale des packages
Quand et pourquoi les packages sont-ils mieux installés à l'échelle mondiale? Afin de répondre à cette question, rappelons en quoi l'installation locale et globale des packages diffère:
- Les packages locaux sont installés dans le répertoire dans lequel ils exécutent une commande de la forme
npm install <package-name>
. Ces packages se trouvent dans le dossier node_modules
situé dans ce répertoire. - Les packages globaux sont installés dans un dossier spécial (dont l'un dépend des paramètres spécifiques de votre système), quel que soit l'endroit où ils exécutent une commande de la forme
npm install -g <package-name>
.
La connexion des packages locaux et globaux dans le code est la mĂŞme:
require('package-name')
Alors, quelle est la meilleure façon d'installer des packages?
En général, tous les packages doivent être installés localement. Pour cette raison, même si vous avez des dizaines de projets Node.js, vous pouvez garantir, si nécessaire, leur utilisation de différentes versions des mêmes packages.
La mise à jour du package global conduit au fait que tous les projets dans lesquels il est appliqué utiliseront sa nouvelle version. Il est facile de comprendre que cela, en termes de support de projet, peut conduire à un véritable cauchemar, car les nouvelles versions de certains packages peuvent être incompatibles avec leurs anciennes versions.
Si chaque projet a sa propre version locale d'un package, même si cela peut sembler un gaspillage de ressources, il s'agit d'une très petite redevance pour éviter les conséquences négatives qui peuvent être causées par l'incompatibilité de nouvelles versions de packages mises à jour de manière centralisée avec le code du projet.
Les packages doivent être installés globalement quand ce sont des utilitaires appelés depuis la ligne de commande qui sont utilisés dans de nombreux projets.
Ces packages peuvent également être installés localement en exécutant les utilitaires de ligne de commande qu'ils fournissent à l'aide de npx, mais certains packages sont toujours mieux installés globalement. Ces packages que vous connaissez peut-être incluent, par exemple, les éléments suivants:
- npm
- créer-réagir-app
- vue-cli
- grunt-cli
- moka
- réagir-natif-cli
- gatsby-cli
- pour toujours
- nodemon
Il est possible que votre système dispose déjà de packages installés dans le monde entier. Pour en savoir plus, utilisez la commande suivante:
npm list -g --depth 0
À propos des dépendances de projet
Quand un package doit-il être considéré comme une dépendance de projet régulière nécessaire pour assurer son fonctionnement, et quand - comme une dépendance de développement?
Lors de l'installation d'un package Ă l'aide d'une commande telle que
npm install <package-name>
il est installé en tant que dépendance régulière. Un enregistrement d'un tel package est effectué dans la section des
dependencies
du fichier
package.json
(avant npm 5, un tel enregistrement n'était effectué qu'en utilisant l'indicateur
--save
, maintenant il n'est plus nécessaire de l'utiliser).
L'utilisation de l'
--save-dev
vous permet d'installer le package en tant que dépendance de développement. En même temps, un enregistrement est effectué dans la section
devDependencies
du fichier
devDependencies
.
Les dépendances de développement sont des packages qui sont nécessaires dans le processus de développement d'un projet; pendant son fonctionnement normal, ils ne sont pas nécessaires. Ces packages incluent, par exemple, des outils de test, Webpack, Babel.
Lorsqu'un projet est déployé à l'aide de la commande
npm install
dans son dossier, dans lequel se trouve un dossier contenant le fichier
package.json
, cela installera toutes les dépendances, car npm suppose qu'une telle installation est effectuée dans le but de travailler sur le projet.
Par conséquent, si le package doit être déployé en production, vous devez utiliser la
install --production
npm
install --production
lors du déploiement. Grâce au drapeau
--production
,
--production
dépendances de
--production
ne seront pas installées.
Utilitaire npx
Nous allons maintenant parler d'une équipe très puissante,
npx , qui est apparue dans npm 5.2. L'une de ses capacités consiste à exécuter des fichiers exécutables inclus dans les packages npm. Nous avons déjà envisagé d'utiliser npx pour exécuter un fichier similaire à partir du package cowsay. Parlons maintenant de cela plus en détail.
▍Utilisez npx pour simplifier l'exécution des commandes locales
Les développeurs de Node.js ont publié de nombreux fichiers exécutables (utilitaires) sous la forme de packages qui étaient censés être installés globalement, ce qui offrait un accès pratique à leurs capacités, car vous pouviez les exécuter à partir de la ligne de commande en entrant simplement le nom de la commande correspondante. Cependant, travailler dans un tel environnement était très inconfortable s'il était nécessaire d'installer différentes versions des mêmes packages.
L'utilisation d'une commande de la forme
npx commandname
recherche automatiquement le fichier souhaité dans le dossier de projet
node_modules
. Cela élimine le besoin de connaître le chemin exact vers un tel fichier. Cela rend également inutile l'installation globale du package, en lui donnant accès à partir de n'importe où dans le système de fichiers grâce à l'utilisation de la variable système
PATH
.
▍Exécution d'utilitaires sans avoir à les installer
Npx a une autre fonctionnalité intéressante, grâce à laquelle les utilitaires peuvent être lancés sans les avoir installés au préalable. Ceci est utile principalement pour les raisons suivantes:
- Aucune installation d'utilitaires requise.
- Vous pouvez exécuter différentes versions des mêmes utilitaires en spécifiant la version souhaitée à l'aide de la construction
@version
.
Voyons comment utiliser ce mécanisme, en utilisant l'utilitaire
cowsay
vous connaissez déjà . Donc, si le package cowsay est installé globalement, l'exécution de la
cowsay "Hello"
sur la ligne de commande produira sur la console une vache "parlante":
_______ < Hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
Si le package cowsay n'est pas installé globalement, une commande similaire lancera une erreur.
L'utilitaire npx vous permet d'exécuter de telles commandes sans les installer. Il ressemble, dans le cadre de notre exemple, à ceci:
npx cowsay "Hello"
Une telle commande fonctionnera, mais bien qu'une vache «parlante», dans l'ensemble, n'apporte pas beaucoup d'avantages, la même approche peut être utilisée pour exécuter des commandes beaucoup plus utiles. Voici quelques exemples:
- Il existe un outil en ligne de commande conçu pour créer et exécuter des applications Vue. En utilisant npx, cela peut être appelé comme ceci:
npx vue create my-vue-app
. - Vous pouvez utiliser l'utilitaire
create-react-app
pour create-react-app
applications React. Son appel via npx ressemble Ă ceci: npx create-react-app my-react-app
.
Après avoir téléchargé et utilisé le code npx approprié, il sera supprimé.
▍ Lancement de code JavaScript à l'aide de différentes versions de Node.js
Afin d'exécuter du code à l'aide de différentes versions de Node.js, vous pouvez, à l'aide de npx, accéder au
node
package npm, en indiquant sa version. Cela ressemble Ă ceci:
npx node@6 -v
Cela élimine le besoin d'outils comme nvm ou d'autres gestionnaires de versions de Node.js.
▍Démarrer des fragments de code arbitraires disponibles à une certaine adresse
Npx vous permet d'exécuter non seulement du code publié dans npm. En particulier, si vous avez un lien vers un certain morceau de code (par exemple, un résumé publié sur
GitHub ), vous pouvez l'exécuter comme ceci:
npx https:
Bien sûr, lors de l'exécution d'un tel code, vous ne devez pas oublier la sécurité. Npx donne au développeur de grandes opportunités, mais cela signifie également une grande responsabilité.
▍ Résultats
Aujourd'hui, nous avons parlé de certains mécanismes npm utiles et de l'utilisation de npx. À ce stade, vous devez avoir une compréhension de base du périphérique npm et savoir comment travailler avec ce gestionnaire de packages. Si vous souhaitez jeter un œil plus approfondi sur npm, consultez la
page de documentation du projet et expérimentez davantage.
La prochaine fois, nous discuterons de certains mécanismes de base de Node.js, dont la compréhension est nécessaire au succès du développement d'applications pour cette plate-forme.
Chers lecteurs! Utilisez-vous npx?
