Manuel Node.js, partie 5: npm et npx

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.




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 --depth=0 

Par conséquent, si, par exemple, vous avez installé uniquement le package cowsay, les éléments suivants s'affichent:

 > npm list --depth=0 /Users/flavio/dev/node/cowsay └── cowsay@1.3.1 

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ètes

Certaines 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 #v6.14.3 npx node@8 -v #v8.11.3 

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://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 

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?

Source: https://habr.com/ru/post/fr423705/


All Articles