Maison >interface Web >js tutoriel >Cet article explique comment utiliser la bibliothèque zx pour écrire des scripts Shell dans Nodejs.
Comment écrire un script Shell dans Node ? L'article suivant vous expliquera comment utiliser la bibliothèque zx pour écrire des scripts Shell dans Node. J'espère qu'il vous sera utile !
Script Shell
Créer un script shell, c'est-à-dire un script exécuté par un shell, tel que Bash ou zsh, est une méthode courante utilisée pour automatiser les tâches répétitives, en particulier pour le personnel d'exploitation et de maintenance. . Pour les ingénieurs front-end, utiliser Node.js pour écrire des scripts shell est un bon choix car il fournit de nombreux modules de base et peut importer d'autres bibliothèques de scripts front-end, réduisant ainsi les coûts d'apprentissage.
Si vous souhaitez essayer d'écrire un script shell qui s'exécute sous Node.js sans utiliser zx.js
, vous constaterez peut-être que ce n'est pas aussi fluide que vous l'espérez. Vous devez écrire une gestion spéciale pour le processus enfant, prendre soin d'échapper aux paramètres de ligne de commande, puis utiliser la sortie standard stdout
et l'erreur standard stderr
, ce n'est pas particulièrement intuitif , et utiliser des scripts shell pour écrire des variables Très maladroit. zx.js
想尝试编写一个在 Node.js 下运行的 shell 脚本,可能会发现它并不像希望的那样流畅。需要为子进程编写特殊处理,注意转义命令行参数,然后使用标准输出 stdout
和标准错误 stderr
,它不是特别直观,并且使用 shell 脚本编写变得非常笨拙。
Bash shell 脚本语言是编写 shell
脚本的最佳选择,不需要编写代码来处理子进程,并且它具有用于处理 stdout
和 stderr
的内置语言特性。但是用Bash编写 shell
脚本也不是那么容易,语法可能相当混乱,使得实现逻辑或处理提示用户输入之类的事情变得不那么方便。
Google 的 zx.js
库有助于使用 Node.js 高效且愉快地编写 shell
脚本。
官方网站:https://github.com/google/zx#-zx
安装
对于前端工程师来说,安装一个依赖是家常便饭,运行以下脚本:
npm install zx
使用
Google 的 zx.js
提供了封装子进程的创建以及从这些进程处理 stdout
和 stderr
的函数。下面将使用的主要函数是 $
函数,使用 zx.js
规定脚本写入扩展名为 .mjs
的文件中,以便能够在顶层使用 await
。如果习惯于 .js
扩展名,请将脚本包装在类似 void async function () {...}()
中。
下面先来使用扩展名 .mjs
,每个 .mjs
文件都将以下代码作为开头:
#! /usr/bin/env node
下面就来实现一个 shell
脚本中 ls
的功能,创建文件 ls.mjs
,完整代码如下:
#! /usr/bin/env node import { $ } from "zx"; $.verbose = false; const output = (await $`ls`).stdout.trim(); console.log(output);
和 shell
脚本文件一样,需要将其转为可执行文件:
chmod +x ./ls.mjs
下面就来执行这个 Node.js 编写的 shell
脚本,执行:
./ls.mjs
Google 的 zx.js
还提供了其他实用函数来简化 shell 脚本编写,例如:
cd()
:允许更改当前的工作目录question()
:Node.js 的 readline 模块的包装器,可以直接提示用户输入。
#! /usr/bin/env node import { $, cd } from "zx"; $.verbose = false; // 默认为true,以详细模式运行 const output = (await $`ls`).stdout.trim(); console.log(output); const dirName = "zx-mkdir-tmp"; await $`mkdir ${dirName}`; // 创建目录 cd(`./${dirName}`); const pwdOutput = (await $`pwd`).stdout.trim(); console.log(pwdOutput); // zx-mkdir-tmp
除了 zx.js
提供的实用功能外,它还提供了几个流行的脚本库,例如:
argv
对象下。fs
shell
, pas besoin d'écrire du code pour gérer les processus enfants, et il possède des fonctionnalités pour gérer stdout
et Fonctionnalités de langage intégrées de stderr
. Mais écrire des scripts shell
dans Bash n'est pas si simple, et la syntaxe peut être assez déroutante, ce qui rend peu pratique l'implémentation d'une logique ou la gestion de choses comme l'invite à saisir l'utilisateur. La bibliothèque zx.js
de Google permet d'écrire des scripts shell
de manière efficace et agréable en utilisant Node.js.
zx.js
de Google fournit des fonctions qui encapsulent la création de processus enfants et gèrent stdout
et stderr
à partir de ces processus. La fonction principale qui sera utilisée ci-dessous est la fonction $
. Utilisez zx.js
pour spécifier que le script est écrit dans un fichier avec l'extension .mjs<.> afin qu'il puisse utiliser <code>await
au niveau supérieur. Si vous êtes habitué à l'extension .js
, enveloppez votre script dans quelque chose comme void async function () {...}()
. 🎜🎜Utilisons d'abord l'extension .mjs
Chaque fichier .mjs
commencera par le code suivant : 🎜rrreee🎜Implémentons un shell
. la fonction de ls
dans le script crée le fichier ls.mjs
Le code complet est le suivant : 🎜rrreee🎜C'est le même que le shell fichier de script et nécessite Convertissez-le en fichier exécutable : 🎜rrreee🎜 Exécutons ce script <code>shell
écrit en Node.js. Exécutez : 🎜rrreee🎜🎜🎜Le zx.js
de Google fournit également d'autres fonctionnalités Fonctions pour simplifier les scripts shell, par exemple : 🎜🎜cd()
: permet de changer le répertoire de travail actuel question()
: un wrapper pour le module readline de Node.js , qui peut demander directement à l'utilisateur une saisie. 🎜rrreee🎜En plus des fonctions pratiques fournies par zx.js
, il fournit également plusieurs bibliothèques de scripts populaires, telles que : 🎜argv
. 🎜fs
principal de Node.js, ainsi que de nombreuses autres façons de faciliter l'utilisation des systèmes de fichiers. 🎜🎜🎜Pour plus de connaissances sur les nœuds, veuillez visiter : 🎜tutoriel Nodejs🎜 ! ! 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!