Comment écrire des scripts Shell dans Node avec la bibliothèque zx de Google

Comment écrire des scripts Shell dans Node avec la bibliothèque zx de Google

Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :

ls`).stdout; console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls

hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

    • La commande que nous avons exécutée (ls

) est incluse dans la sortie.

  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

ls`).stdout ; + const output = (await

Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre le scriptage de l’interpréteur de commandes assez maladroit.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez

Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :

ls`).stdout; console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls

hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

    • La commande que nous avons exécutée (ls

) est incluse dans la sortie.

  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

ls`).stdout ; + const output = (await

Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre le scriptage de l’interpréteur de commandes assez maladroit.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter directement l’entrée de l’utilisateur.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await

Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :

ls`).stdout; console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls

hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

    • La commande que nous avons exécutée (ls

) est incluse dans la sortie.

  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

ls`).stdout ; + const output = (await

Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre le scriptage de l’interpréteur de commandes assez maladroit.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez

Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

attendez 
Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google, et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre les scripts shell assez difficiles à utiliser.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il possède des fonctions de langage intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Quelques conditions sont requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et de Node.js.
  • Vous devrez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js >= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion de stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

import { $ } from "zx";

await $`ls`;

Et voici le résultat de l’exécution de ce code :

$ ls
bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

  • cd(). Ceci nous permet de changer notre répertoire de travail actuel.
  • question(). Il s’agit d’une enveloppe autour du module readline de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

  • craie. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.
  • minimaliste. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv.
  • récupérer. Une implémentation Node.js populaire de l’API Fetch. Nous pouvons l’utiliser pour effectuer des requêtes HTTP.
  • fs-extra. Une bibliothèque qui expose le module fs de base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous apporte, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm init --yes

Ensuite, nous pouvons installer la bibliothèque zx:

npm install --save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt en tant que dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installée, ainsi que contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/envnode

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :



import { $ } from "zx";

const output = (await $`ls`).stdout;

console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls
hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

  • La commande que nous avons exécutée(ls) est incluse dans la sortie.
  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

- const output = (await 
Dans cet article, nous apprendrons ce que fournit la bibliothèque zx de Google, et comment nous pouvons l'utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre l’écriture de scripts shell assez difficile.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter l’entrée de l’utilisateur de manière simple.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :

ls`).stdout; console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls

hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

    • La commande que nous avons exécutée (ls

) est incluse dans la sortie.

  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

ls`).stdout ; + const output = (await

Dans cet article, nous allons apprendre ce que fournit la bibliothèque zx de Google et comment nous pouvons l’utiliser pour écrire des scripts shell avec Node.js. Nous apprendrons ensuite à utiliser les fonctionnalités de zx en construisant un outil en ligne de commande qui nous aide à amorcer la configuration de nouveaux projets Node.js.

Écriture de scripts shell : le problème

La création d’un script shell – un script qui est exécuté par un shell tel que Bash ou zsh – peut être un excellent moyen d’automatiser des tâches répétitives. Node.js semble être un choix idéal pour écrire un script shell, car il nous fournit un certain nombre de modules de base et nous permet d’importer toute bibliothèque de notre choix. Il nous donne également accès aux caractéristiques du langage et aux fonctions intégrées fournies par JavaScript.

Mais si vous avez essayé d’écrire un script shell pour l’exécuter sous Node.js, vous avez probablement constaté que ce n’est pas aussi facile que vous le souhaiteriez. Vous devez écrire une gestion spéciale pour les processus enfants, prendre soin de l’échappement des arguments de la ligne de commande, et ensuite vous retrouver à jouer avec stdout (sortie standard) et stderr (erreur standard). Ce n’est pas particulièrement intuitif et cela peut rendre le scriptage de l’interpréteur de commandes assez maladroit.

Le langage de script shell Bash est un choix populaire pour écrire des scripts shell. Il n’est pas nécessaire d’écrire du code pour gérer les processus enfants, et il dispose de fonctionnalités linguistiques intégrées pour travailler avec stdout et stderr. Mais il n’est pas non plus si facile d’écrire des scripts shell avec Bash. La syntaxe peut être assez confuse, ce qui rend difficile l’implémentation d’une logique ou la gestion d’éléments tels que les invites de saisie de l’utilisateur.

La bibliothèque zx de Google permet de rendre les scripts shell avec Node.js efficaces et agréables.

Conditions requises pour le suivi

Il y a quelques conditions requises pour suivre cet article :

  • Idéalement, vous devez être familier avec les bases de JavaScript et Node.js.
  • Vous devez être à l’aise pour exécuter des commandes dans un terminal.
  • Vous devez avoir installé Node.js

>= v14.13.1.

L’ensemble du code de cet article est disponible sur GitHub.

Comment fonctionne le zx de Google ?

Google’s zx fournit des fonctions qui englobent la création de processus enfants et la gestion des stdout et stderr de ces processus. La principale fonction avec laquelle nous allons travailler est la fonction $. Voici un exemple de cette fonction en action :

ls`;

Et voici le résultat de l’exécution de ce code :

$ ls

bootstrap-tool
hello-world
node_modules
package.json
README.md
typescript

La syntaxe JavaScript de l’exemple ci-dessus peut sembler un peu bizarre. Elle utilise une fonctionnalité du langage appelée  » tagged template literals ». Fonctionnellement, c’est la même chose que d’écrire await $("ls").

Le zx de Google fournit plusieurs autres fonctions utilitaires pour faciliter la création de scripts shell, telles que :

    • cd()

. Ceci nous permet de changer notre répertoire de travail actuel.

  • question(). Il s’agit d’une enveloppe autour du module readline

de Node.js. Il permet de solliciter directement l’entrée de l’utilisateur.

En plus des fonctions utilitaires que zx fournit, il met également à notre disposition plusieurs bibliothèques populaires, telles que :

    • lacraie

. Cette bibliothèque nous permet d’ajouter de la couleur à la sortie de nos scripts.

    • minimist. Une bibliothèque qui analyse les arguments de la ligne de commande. Ils sont ensuite exposés sous un objet argv

.

    • fetch. Une implémentation populaire de Node.js de l’API Fetch

. On peut l’utiliser pour effectuer des requêtes HTTP.

  • fs-extra. Une bibliothèque qui expose le module fs de

base de Node.js, ainsi qu’un certain nombre de méthodes supplémentaires pour faciliter le travail avec un système de fichiers.

Maintenant que nous savons ce que zx nous donne, créons notre premier script shell avec lui.

Hello World avec zx de Google

Tout d’abord, créons un nouveau projet :

mkdir zx-shell-scripts
cd zx-shell-scripts

npm

init –yes

Nous pouvons ensuite installer la bibliothèque zx:

npm install

–save-dev zx

Remarque : la documentation de zxsuggère d’installer la bibliothèque de manière globale avec npm. En l’installant plutôt comme une dépendance locale de notre projet, nous pouvons nous assurer que zx est toujours installé, et contrôler la version que nos scripts shell utilisent.

Attente de

haut niveau
Afin d’utiliser le top-level await dans Node.js – await en dehors d’une fonction asynchrone – nous devons écrire notre code dans des modules ECMAScript (ES), qui prennent en charge le top-level await. Nous pouvons indiquer que tous les modules d’un projet sont des modules ES en ajoutant "type" : "module" dans notre package.json, ou nous pouvons définir l’extension de fichier des scripts individuels sur .mjs. Nous utiliserons l’extension de fichier .mjs pour les exemples de cet article.

Exécution d’une commande et capture de sa sortie

Créons un nouveau script nommé hello-world.mjs. Nous ajouterons une ligne shebang, qui indique au noyau du système d’exploitation (OS) d’exécuter le script avec le programme node:

#! /usr/bin/env

node

Maintenant, nous allons ajouter du code qui utilise zx pour exécuter une commande.

Dans le code suivant, nous lançons une commande pour exécuter le programme ls. Le programme ls listera les fichiers dans le répertoire de travail actuel (le répertoire dans lequel se trouve le script). Nous allons capturer la sortie standard du processus de la commande, la stocker dans une variable et ensuite l’enregistrer dans le terminal :

ls`).stdout; console.log(output);

Remarque : la documentation de zx suggère de mettre /usr/bin/env zx dans la ligne shebang de nos scripts, mais nous utilisons plutôt /usr/bin/env node. Ceci est dû au fait que nous avons installé zx comme une dépendance locale de notre projet. Nous importons ensuite explicitement les fonctions et les objets que nous voulons utiliser à partir du paquet zx. Cela permet d’indiquer clairement d’où proviennent les dépendances utilisées dans notre script.

Nous utiliserons ensuite chmod pour rendre le script exécutable :

chmod u+x hello-world.mjs

Exécutons notre script :

./hello-world.mjs

Nous devrions maintenant voir la sortie suivante :

$ ls

hello-world.mjs
node_modules
package.json
package-lock.json
README.md
hello-world.mjs
node_modules
package.json
package-lock.json
README.md

Vous remarquerez quelques éléments dans la sortie de notre script shell :

    • La commande que nous avons exécutée (ls

) est incluse dans la sortie.

  • La sortie de la commande est affichée deux fois.
  • Il y a une nouvelle ligne supplémentaire à la fin de la sortie.

zx fonctionne en mode verbeux par défaut. Il affiche la commande que vous passez à la fonction $ et affiche également la sortie standard de cette commande. Nous pouvons modifier ce comportement en ajoutant la ligne de code suivante avant d’exécuter la commande ls:

$.verbose = false;

La plupart des programmes de ligne de commande, tels que ls, affichent un caractère de nouvelle ligne à la fin de leur sortie pour rendre la sortie plus lisible dans le terminal. C’est une bonne chose pour la lisibilité, mais comme nous stockons la sortie dans une variable, nous ne voulons pas de cette nouvelle ligne supplémentaire. Nous pouvons nous en débarrasser avec la fonction JavaScript String#trim():

ls`).stdout.trim()

Si nous exécutons à nouveau notre script, nous verrons que les choses ont l’air beaucoup mieux :

hello-world.mjs
node_modules
package.json
package-lock.json

Utilisation de zx de Google avec TypeScript

Si nous voulons écrire des scripts shell qui utilisent zx en TypeScript, il y a quelques différences mineures dont nous devons tenir compte.

Remarque : le compilateur TypeScript fournit un certain nombre d’options de configuration qui nous permettent d’ajuster la façon dont il compile notre code TypeScript. En gardant cela à l’esprit, la configuration et le code TypeScript suivants sont conçus pour fonctionner sous la plupart des versions de TypeScript.

Tout d’abord, installons les dépendances dont nous aurons besoin pour exécuter notre code TypeScript :

npm install --save-dev typescript ts-node

Le paquet ts-node fournit un moteur d’exécution TypeScript, nous permettant de transpiler et d’exécuter du code TypeScript.

Nous devons créer un fichier tsconfig.json contenant la configuration suivante :

{
  "compilerOptions": {
    "cible": "es2017",
    "module": "commonjs"
  }
}

Créons maintenant un nouveau script nommé hello-world-typescript.ts. Tout d’abord, nous allons ajouter une ligne shebang qui indique à notre noyau OS d’exécuter le script avec le programme ts-node:

#! ./node_modules/.bin/ts-node

Afin d’utiliser le mot-clé await dans notre code TypeScript, nous devons l’envelopper dans une expression de fonction immédiatement invoquée (IIFE), comme le recommande la documentation zx:



import { $ } de "zx";

void ( fonctionasynchrone () {
 await $`ls`;
})();

Nous devons ensuite rendre le script exécutable afin de pouvoir l’exécuter directement :

chmod u+x hello-world-typescript.ts

Lorsque nous exécutons le script :

./hello-world-typescript.ts

… nous devrions voir la sortie suivante :

$ ls
hello-world-typescript.ts
node_modules
package.json
package-lock.json
README.md
tsconfig.json

L’écriture de scripts avec zx en TypeScript est similaire à l’utilisation de JavaScript, mais nécessite un peu plus de configuration et d’habillage de notre code.

Maintenant que nous avons appris les bases de l’écriture d’un script shell avec zx de Google, nous allons construire un outil avec. Cet outil automatisera la création d’un processus qui prend souvent beaucoup de temps : le démarrage de la configuration d’un nouveau projet Node.js.

Nous allons créer un script shell interactif qui sollicite l’entrée de l’utilisateur. Il utilisera également la bibliothèque chalk, fournie par zx, pour mettre en évidence la sortie en différentes couleurs et offrir une expérience utilisateur conviviale. Notre script shell installera également les paquets npm dont notre nouveau projet a besoin, afin qu’il soit prêt à être développé immédiatement.

Mise en route

Créons un nouveau fichier nommé bootstrap-tool.mjs et ajoutons une ligne shebang. Nous allons également importer les fonctions et les modules que nous utiliserons à partir du paquet zx, ainsi que le module Node.js core path:

#! /usr/bin/envnode



import { $, argv, cd, chalk, fs, question } de "zx";

import path de "path";

Comme pour les scripts que nous avons créés précédemment, nous voulons rendre notre nouveau script exécutable :

chmod u+x bootstrap-tool.mjs

Nous allons également définir une fonction d’aide qui produit un message d’erreur en texte rouge et quitte le processus Node.js avec un code de sortie d’erreur de 1:

function exitWithError(errorMessage) {
 console.error(chalk.red(errorMessage));
  process.exit(1);
}

Nous utiliserons cette fonction d’aide à divers endroits dans notre script shell lorsque nous devrons gérer une erreur.

Vérifiez les dépendances

L’outil que nous créons devra exécuter des commandes qui utilisent trois programmes différents : git, node et npx. Nous pouvons utiliser la bibliothèque qui pour nous aider à vérifier si ces programmes sont installés et disponibles pour être utilisés.

Tout d’abord, nous devons installer le paquet which:

npm install --save-dev qui

Ensuite, nous pouvons l’importer :

import which de "which";

Puis nous créerons une fonction checkRequiredProgramsExist qui l’utilise :

 fonctionasynchrone checkRequiredProgramsExist(programmes) {
 try {
   for (let program of programs) {
     await which(programme);
   }
 } catch (error) {
   exitWithError(`Erreur : Commande requise ${error.message}`);
 }
}

La fonction ci-dessus accepte un tableau de noms de programmes. Elle boucle à travers le tableau, et pour chaque programme, elle appelle la fonction which. Si which trouve le chemin d’accès au programme, elle le renvoie. Sinon, si le programme est manquant, elle lance une erreur. Si l’un des programmes est manquant, nous appelons notre aide exitWithError pour afficher un message d’erreur et arrêter l’exécution du script.

Nous pouvons maintenant ajouter un appel à checkRequiredProgramsExist pour vérifier que les programmes dont dépend notre outil sont disponibles :

await checkRequiredProgramsExist(["git", "node", "npx"]);

Ajouter une option de répertoire cible

Comme l’outil que nous construisons va nous aider à amorcer de nouveaux projets Node.js, nous voudrons exécuter toutes les commandes que nous ajoutons dans le répertoire du projet. Nous allons maintenant ajouter un argument de ligne de commande --directory à notre script.

zx intègre le paquet minimist, qui analyse tous les arguments de ligne de commande transmis à notre script. Ces arguments de ligne de commande analysés sont mis à disposition en tant que argv par le paquet zx.

Ajoutons une vérification pour un argument de ligne de commande nommé répertoire:

let targetDirectory = argv.directory;
if (!targetDirectory) {
 exitWithError("Error : You must specify the --directory argument");
}

Si l’argument directory a été transmis à notre script, nous voulons vérifier qu’il s’agit du chemin d’accès à un répertoire qui existe. Nous utiliserons la méthode fs.pathExists fournie par fs-extra:

targetDirectory = path.resolve(targetDirectory);

si (!(await fs.pathExists(targetDirectory))) {
 exitWithError(`Erreur : Répertoire cible '${targetDirectory}' n'existe pas`);
}

Si le répertoire cible existe, nous utiliserons alors la fonction cd fournie par zx pour changer notre répertoire de travail actuel :

cd(targetDirectory);

Si nous exécutons maintenant notre script sans l’argument --directory, nous devrions recevoir une erreur :

$ ./bootstrap-tool.mjs

Erreur : Vous devez spécifier l'argument --directory

Vérifier les paramètres globaux de Git

Dans un instant, nous allons initialiser un nouveau dépôt Git dans notre répertoire de projet, mais nous voulons d’abord vérifier que Git a la configuration dont il a besoin. Nous voulons nous assurer que nos commits seront attribués correctement par les services d’hébergement de code comme GitHub.

Pour ce faire, créons une fonction getGlobalGitSettingValue. Elle exécutera la commande git config pour récupérer la valeur d’un paramètre de configuration Git :

async function getGlobalGitSettingValue(settingName) {
  $.verbose = false;

 let settingValue = "";
 try {
    settingValue = (
     await $`git config --global --get ${settingName}`
   ).stdout.trim();
 } catch (error) {
    
 }

  $.verbose = true;

 retourne la valeur du paramètre;
}

Vous remarquerez que nous désactivons le mode verbeux que zx a défini par défaut. Cela signifie que, lorsque nous exécutons les commandes git config, la commande et tout ce qu’elle envoie à la sortie standard ne seront pas affichés. Nous réactivons le mode verbeux à la fin de la fonction afin de ne pas affecter les autres commandes que nous ajouterons plus tard dans notre script.

Nous allons maintenant créer un checkGlobalGitSettings qui accepte un tableau de noms de paramètres Git. Elle passera en boucle chaque nom de paramètre et le transmettra à la fonction getGlobalGitSettingValue pour récupérer sa valeur. Si le paramètre n’a pas de valeur, nous afficherons un message d’avertissement :

async function checkGlobalGitSettings(settingsToCheck) {
 for (let settingName of settingsToCheck) {
   const settingValue = await getGlobalGitSettingValue(settingName);
   if (!settingValue) {
     console.warn(
        chalk.yellow(`Avertissement : Paramètre global de git '${settingName}' n'est pas défini.`)
     );
   }
 }
}

Ajoutons un appel à checkGlobalGitSettings et vérifions que les paramètres Git user.name et user.email ont été définis :

await checkGlobalGitSettings(["nom.utilisateur", "utilisateur.email"]);

Initialiser un nouveau dépôt Git

Nous pouvons initialiser un nouveau dépôt Git dans le répertoire du projet en ajoutant la commande suivante :

await $`git init`;

Générer un fichier package.json

Chaque projet Node.js a besoin d’un fichier package.json. C’est là que nous définissons les métadonnées du projet, que nous spécifions les paquets dont le projet dépend et que nous ajoutons de petits scripts utilitaires.

Avant de générer un fichier package.json pour notre projet, nous allons créer quelques fonctions d’aide. La première est une fonction readPackageJson, qui va lire un fichier package.json dans le répertoire du projet :

async function readPackageJson(directory) {
 const packageJsonFilepath = `${directory}/package.json`;

 return await fs.readJSON(packageJsonFilepath);
}

Nous allons ensuite créer une fonction writePackageJson, que nous pourrons utiliser pour écrire les modifications apportées au fichier package.json du projet :

 fonctionasynchrone writePackageJson(répertoire,contenu) {
 const packageJsonFilepath = `${directory}/package.json`;

 await fs.writeJSON(packageJsonFilepath, contents, { spaces: 2 });
}

Les méthodes fs.readJSON et fs.writeJSON que nous avons utilisées dans les fonctions ci-dessus sont fournies par la bibliothèque fs-extra.

Avec nos fonctions d’aide package.json définies, nous pouvons commencer à réfléchir au contenu de notre fichier package.json.

Node.js prend en charge deux types de modules :

  • Modules CommonJS(CJS). Utilise module.exports pour exporter des fonctions et des objets, et require() pour les charger dans un autre module.
  • Modules ECMAScript(ESM). Utilise export pour exporter des fonctions et des objets et import pour les charger dans un autre module.

L’écosystème Node.js adopte progressivement les modules ES, qui sont courants dans le JavaScript côté client. Pendant que les choses sont dans cette phase de transition, nous devons décider si nos projets Node.js utiliseront les modules CJS ou ESM par défaut. Créons une fonction promptForModuleSystem qui demande quel type de module ce nouveau projet doit utiliser :

async function promptForModuleSystem(moduleSystems) {
 const moduleSystem = await question(
    `Quel système de modules Node.js voulez-vous utiliser ? (${moduleSystems.join(
     " ou "
   )}) `,
   {
      choix: moduleSystems,
   }
 );

 retourne le moduleSystème;
}

La fonction ci-dessus utilise la fonction question qui est fournie par zx.

Nous allons maintenant créer une fonction getNodeModuleSystem pour appeler notre fonction promptForModuleSystem. Elle vérifiera que la valeur saisie est valide. Si elle ne l’est pas, elle posera à nouveau la question :s

async function getNodeModuleSystem() {
 const moduleSystems = ["module", "commonjs"];
 const selectedModuleSystem = await promptForModuleSystem(moduleSystems);

 const isValidModuleSystem = moduleSystems.includes(selectedModuleSystem);
 if (!isValidModuleSystem) {
   console.error(
      chalk.red(
        `Erreur : Le système du module doit être soit '${moduleSystems.join(
         "' ou '"
       )}'n`
     )
   );

   return await getNodeModuleSystem();
 }

 return selectedModuleSystem;
}

Nous pouvons maintenant générer le fichier package.json de notre projet en exécutant la commande npm init:

await $`npm init --yes`;

Nous utiliserons ensuite notre fonction d’aide readPackageJson pour lire le fichier package.json nouvellement créé. Nous demanderons quel système de modules le projet doit utiliser, le définirons comme valeur de la propriété type dans l’objet packageJson, puis le réécrirons dans le fichier package.json du projet :

const packageJson = await readPackageJson(targetDirectory);
const selectedModuleSystem = await getNodeModuleSystem();

packageJson.type = selectedModuleSystem;

await writePackageJson(targetDirectory, packageJson);

Conseil : pour obtenir des valeurs par défaut sensées dans votre package.json lorsque vous exécutez npm init avec le drapeau --yes, assurez-vous de définir les paramètres de configuration de npm init-*.

Installez les dépendances requises du projet

Pour faciliter le démarrage du développement du projet après l’exécution de notre outil d’amorçage, nous allons créer une fonction promptForPackages qui demande quels paquets npm installer :

async function promptForPackages() {
 let packagesToInstall = await question(
   "Quels paquets npm voulez-vous installer pour ce projet ? "
 );

  packagesToInstall = packagesToInstall
   .trim()
   .split(" ")
   .filter((pkg) => pkg);

 retourne packagesToInstall;
}

Au cas où nous aurions une faute de frappe en entrant un nom de paquet, nous créerons une fonction identifyInvalidNpmPackages. Cette fonction acceptera un tableau de noms de paquets npm, puis exécutera la commande npm view pour vérifier s’ils existent :

 fonctionasynchrone identifyInvalidNpmPackages(packages) {
  $.verbose = false;

 let invalidPackages = [];
 for (const pkg of packages) {
   try {
     attendre $`npm view ${pkg}`;
   } catch (error) {
      invalidPackages.push(pkg);
   }
 }

  $.verbose = true;

 retourner invalidPackages;
}

Créons une fonction getPackagesToInstall qui utilise les deux fonctions que nous venons de créer :

async function getPackagesToInstall() {
 const packagesToInstall = await promptForPackages();
 const invalidPackages = await identifyInvalidNpmPackages(packagesToInstall);

 const allPackagesExist = invalidPackages.length === 0;
 si (!allPackagesExist) {
   console.error(
      chalk.red(
        `Erreur : Les paquets suivants n'existent pas sur npm ${invalidPackages.join(
         ", "
       )}n`
     )
   );

   return await getPackagesToInstall();
 }

 return packagesToInstall;
}

La fonction ci-dessus affichera une erreur si le nom d’un paquet est incorrect, puis demandera à nouveau les paquets à installer.

Une fois que nous avons obtenu une liste de paquets valides à installer, installons-les avec la commande npm install:

const packagesToInstall = await getPackagesToInstall();
const havePackagesToInstall = packagesToInstall.length > 0;
if (havePackagesToInstall) {
 attendre `npm install ${packagesToInstall}`;
}

Générer la configuration pour l’outillage

La création de la configuration du projet est la chose parfaite que nous pouvons automatiser avec notre outil de démarrage de projet. Tout d’abord, ajoutons une commande pour générer un fichier .gitignore afin d’éviter de livrer accidentellement des fichiers que nous ne voulons pas dans notre dépôt Git :

await $`npx gitignore node`;

La commande ci-dessus utilise le paquet gitignore pour extraire le fichier .gitignore de Node.js des modèles gitignore de GitHub.

Pour générer nos fichiers de configuration EditorConfig, Prettier et ESLint, nous utiliserons un outil de ligne de commande appelé Mrm.

Installons globalement les dépendances de Mrm dont nous aurons besoin :

npm install --global mrm mrm-task-editorconfig mrm-task-prettier mrm-task-eslint

Et puis ajoutons les commandes mrm pour générer les fichiers de configuration :

await $`npx mrm editorconfig`;
await $`npx mrm prettier`;
await $`npx mrm eslint`;

Mrm se charge de générer les fichiers de configuration, ainsi que d’installer les paquets npm requis. Il fournit également de nombreuses options de configuration, ce qui nous permet d’adapter les fichiers de configuration générés à nos préférences personnelles.

Générer un README de base

Nous pouvons utiliser notre fonction d’aide readPackageJson pour lire le nom du projet à partir du fichier package.json du projet. Nous pouvons ensuite générer un README de base au format Markdown et l’écrire dans un fichier README.md:

const {nom: projectName } = await readPackageJson(targetDirectory);
const readmeContents = `# ${nom du projet}

...
`;

await fs.writeFile(`${targetDirectory}/README.md`, readmeContents);

Dans la fonction ci-dessus, nous utilisons la variante promise de fs.writeFile qui est exposée par fs-extra.

Livrer le squelette du projet à Git

Enfin, il est temps de valider le squelette du projet que nous avons créé avec git:

await $`git add .`;
await $`git commit -m "Ajouter le squelette du projet"`;

Nous afficherons ensuite un message confirmant que notre nouveau projet a été amorcé avec succès :

console.log(
  craie.vert(
    `n✔️ Le projet ${nomduprojet} a été amorcé avec succès!n`
 )
);
console.log(craie.vert(`Ajoutez un remote git et poussez vos modifications.`));

Amorcer un nouveau projet

Nous pouvons maintenant utiliser l’outil que nous avons créé pour amorcer un nouveau projet :

mkdir nouveau-projet

./bootstrap-tool.mjs --directory nouveau-projet

Et regarder tout ce que nous avons mis en place en action !

Conclusion

Dans cet article, nous avons appris comment créer de puissants scripts shell dans Node.js à l’aide de la bibliothèque zx de Google. Nous avons utilisé les fonctions utilitaires et les bibliothèques qu’elle fournit pour créer un outil de ligne de commande flexible.

L’outil que nous avons construit jusqu’à présent n’est qu’un début. Voici quelques idées de fonctionnalités que vous pourriez essayer d’ajouter vous-même :

  • Créez automatiquement le répertoire cible. Si le répertoire cible n’existe pas encore, invitez l’utilisateur et demandez-lui s’il souhaite qu’il soit créé pour lui.
  • Hygiène de l’open-source. Demandez à l’utilisateur s’il crée un projet qui sera open-source. Si c’est le cas, exécutez des commandes pour générer les fichiers de licence et de convention de contributeur.
  • Automatisez la création d’un dépôt sur GitHub. Ajoutez des commandes qui utilisent le CLI de GitHub pour créer un dépôt distant sur GitHub. Le nouveau projet peut alors être poussé vers ce dépôt une fois que le squelette initial a été commité avec Git.

L’ensemble du code de cet article est disponible sur GitHub.

Laurent

Laurent est un développeur web originaire de Corée. Il aime construire des choses pour le web et partager ce qu'il a appris en écrivant sur son blog. Quand il n'est pas en train de coder ou d'apprendre quelque chose de nouveau, il aime regarder des dessins animés et jouer à des jeux vidéo.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *