Présentation de npx : un exécuteur de paquets npm

Présentation de npx : un exécuteur de paquets npm

Ceux d'entre vous qui mettent à niveau npm vers sa dernière version, npm@5.2.0, remarqueront peut-être qu'il installe un nouveau binaire à côté du npm habituel : npx.

npx est un outil destiné à compléter l'expérience d'utilisation des paquets du registre npm - de la même manière que npm rend super facile l'installation et la gestion des dépendances hébergées sur le registre, npx rend facile l'utilisation des outils CLI et autres exécutables hébergés sur le registre. Il simplifie grandement un certain nombre de choses qui, jusqu'à présent, nécessitaient un peu de cérémonie pour le simple npm :

Utilisation d'outils installés localement sans npm run-script

image

Ces dernières années, l'écosystème des NPM s'est orienté de plus en plus vers l'installation d'outils en tant que dépendances de projets locaux, au lieu d'exiger des utilisateurs qu'ils les installent à l'échelle mondiale. Cela signifie que des outils tels que moka, grunt et bower, qui étaient autrefois principalement installés sur un système à l'échelle mondiale, peuvent maintenant avoir leurs versions gérées sur la base de chaque projet. Cela signifie également que tout ce que vous avez à faire pour mettre en place un projet basé sur npm est de vous assurer que vous avez node+npm sur votre système, de cloner le repo git, et de le faire fonctionner en installant et en testant npm. Puisque le script d'exécution de npm ajoute des binaires locaux au path, cela fonctionne très bien !

Exécution des commandes

image

Vous êtes-vous déjà retrouvé dans une situation où vous vouliez essayer un outil CLI, mais où il était ennuyeux de devoir installer un global pour le faire fonctionner une seule fois ? npx est parfait pour cela aussi. En appelant npx quand n'est pas déjà dans votre $PATH, un paquet avec ce nom sera automatiquement installé pour vous à partir du registre npm, et sera invoqué. Lorsque cela sera fait, le paquet installé ne se trouvera nulle part dans vos globals, vous n'aurez donc pas à vous soucier de la pollution à long terme.

Cette fonctionnalité est également idéale pour les générateurs. Les outils tels que yeoman ou create-react-app ne sont appelés qu'une fois par mois. Lorsque vous les utiliserez à nouveau, ils seront déjà dépassés, et vous devrez donc les installer chaque fois que vous voudrez les utiliser.

En tant que responsable de l'outil, j'aime beaucoup cette fonctionnalité car elle me permet de mettre $ npx my-tool dans les instructions du fichier README.md, au lieu d'essayer de faire passer l'obstacle de l'installation. Pour être franc, dire "oh juste copier-coller cette commande, c'est un engagement zéro" est plus acceptable pour les utilisateurs qui ne savent pas s'ils doivent utiliser un outil ou non.

Voici quelques autres paquets amusants que vous pourriez essayer d'utiliser avec npx : happy-birthday, benny-hill, workin-hard, cowsay, yo, create-react-app, npm-check. Allez-y ! Une commande permettant de faire fonctionner un véritable serveur REST local est suffisamment petite pour tenir dans un tweet.

Exécutez des commandes avec différentes versions de Node.js

image

Il s'avère qu'il y a un paquet cool appelé node-bin sur le registre npm. Cela signifie que vous pouvez très facilement essayer les commandes de node en utilisant différentes versions de node, sans avoir à utiliser un gestionnaire de version comme nvm, nave, ou n. Tout ce dont vous avez besoin est une installation standard de npm@5.2.0 !

L'option -p pour npx vous permet de spécifier les paquets à installer et à ajouter au $PATH en cours d'exécution, ce qui signifie que vous pouvez faire des choses amusantes comme

$ npx -p node-bin@6 npm

pour installer et tester votre paquet npm actuel comme si vous exécutiez node@6 globalement. Je l'utilise tout le temps moi-même - et même récemment, j'ai dû l'utiliser beaucoup pour un projet, à cause d'une de mes bibliothèques de test qui s'est cassée sous node@8. Cela m'a vraiment sauvé la vie, et je l'ai trouvé beaucoup plus facile à utiliser pour ce genre de cas d'utilisation que les gestionnaires de version, que je trouve toujours d'une manière ou d'une autre un moyen de casser ou de mal configurer.

Note : node-bin ne fonctionne que sur les plates-formes *nix. C'est l'excellent travail d'Aria Stewart. À l'avenir, ce même paquet sera disponible sous forme de simple node, de sorte que vous pourrez faire

$ npx node@6 ... 

directement, y compris sous Windows.

Développer des scripts d'exécution npm de manière interactive

image

De nos jours, de nombreux utilisateurs de npm profitent de la fonctionnalité de script d'exécution, qui est vraiment géniale. Non seulement ils organisent votre $PATH de manière à ce que les binaires locaux soient accessibles, mais ils ajoutent également toute une série de variables d'environnement auxquelles vous pouvez accéder dans ces scripts ! Vous pouvez voir ce que sont ces variables supplémentaires avec $ npm run env | grep npm_.

Cela peut rendre difficile le développement et le test des scripts d'exécution - et cela signifie que même avec des astuces comme $(npm bin)/quelque chose, vous n'aurez toujours pas accès à ces variables d'environnement magiques lorsque vous travaillez de manière interactive.

Mais attendez ! npx a encore un autre tour dans son sac : lorsque vous utilisez la -coption, le script écrit à l'intérieur de la chaîne de caractères aura un accès complet aux mêmes variables env qu'un script d'exécution normal ! Vous pouvez même utiliser des tuyaux et des commandes multiples avec une seule invocation de npx !

Partagez vos scripts avec vos amis et vos proches !

image

Il est devenu assez courant d'utiliser gist.github.com pour partager toutes sortes de scripts utilitaires, au lieu de mettre en place des dépôts git entiers, de lancer de nouveaux outils, etc.

Avec npx, vous pouvez aller plus loin : puisque npx accepte tout spécificateur que npm lui-même accepte, vous pouvez créer un gist que les gens peuvent invoquer directement, avec une seule commande !

Essayez-le vous-même avec https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 !

Note : Restez en sécurité là-bas ! Veillez toujours à lire l'essentiel lorsque vous les exécutez de cette manière, comme vous le feriez avec des scripts .sh !

Bonus : auto-fallback du shell

image

Cette fonctionnalité géniale, ajoutée par Félix Saparelli, signifie que pour beaucoup de ces cas d'utilisation, vous n'avez même pas besoin d'appeler npx directement ! La principale différence entre l'utilisation régulière de npx et la solution de repli est que la solution de repli n'installe pas de nouveaux paquets à moins que vous n'utilisiez la syntaxe pkg@versions : un filet de sécurité contre les typosquattages potentiellement dangereux.

La mise en place de l'auto-fallback est simple : cherchez dans la documentation npx la commande à utiliser pour votre shell actuel, ajoutez-la à .bashrc/ .zshrc / .fishrc, puis redémarrez votre shell (ou utilisez les sources ou un autre mécanisme pour rafraîchir le shell).

Maintenant, vous pouvez faire des choses comme

$ standard@8 --version

pour essayer différentes versions de choses, et si vous êtes dans un projet npm, $ moka reviendra automatiquement à la version de moka installée localement, à condition qu'elle ne soit pas déjà installée globalement.

source : https://blog.npmjs.org/post/162869356040/introducing-npx-an-npm-package-runner