Maison >interface Web >js tutoriel >Comment écrire des scripts de shell dans le nœud avec la bibliothèque ZX de Google
Cet article explore la bibliothèque ZX de Google, un outil puissant pour rationaliser le script shell dans les projets Node.js. Nous allons créer un utilitaire de ligne de commande pour bootstrap de nouveaux projets Node.js, présentant les capacités de ZX.
Avantages clés du zx:
de Google$
(pour l'exécution des commandes), cd()
, question()
, et l'accès aux bibliothèques populaires (par exemple, chalk
, minimist
, fetch
, fs-extra
). Le défi des scripts de coquille traditionnels:
Les scripts de coquille traditionnels (bash, zsh) peuvent être lourds. La gestion des processus enfants, l'échappement des arguments et la gestion de STDOUT / STDERR ajoutent de la complexité. Bien que Bash propose des fonctionnalités intégrées, sa syntaxe peut être moins intuitive pour une logique complexe ou une gestion des entrées utilisateur. Node.js, tout en offrant des modules de base et une flexibilité de JavaScript, nécessite une gestion manuelle du processus des enfants, ce qui le rend moins simple.
ZX de Google: une solution:
ZX résout élégamment ces problèmes. Il enveloppe la gestion des processus enfants et rationalise la manipulation des E / S.
Prérequis:
Le code complet est disponible sur github.
Comment fonctionne ZX:
La fonction centrale est $
. Par exemple:
<code class="language-javascript">import { $ } from "zx"; await $`ls`;</code>
Cela exécute ls
et capture la sortie. ZX utilise des littéraux de modèle étiquetés pour une syntaxe propre. D'autres fonctions utiles incluent cd()
pour modifier les répertoires et question()
pour l'entrée utilisateur. Il intègre également des bibliothèques populaires comme chalk
(pour la sortie colorée) et minimist
(pour l'analyse d'argument en ligne de commande).
Bonjour le monde avec zx:
mkdir zx-project && cd zx-project && npm init -y
npm install --save-dev zx
hello.mjs
: <code class="language-javascript">#! /usr/bin/env node import { $ } from "zx"; $.verbose = false; // Suppress command echoing const output = (await $`ls`).stdout.trim(); // Trim extra newline console.log(output);</code>
chmod u x hello.mjs
./hello.mjs
zx avec TypeScript:
TypeScript nécessite un tsconfig.json
(par exemple, "compilerOptions": {"target": "es2017", "module": "commonjs"}
) et envelopper await
dans un iife:
<code class="language-javascript">import { $ } from "zx"; await $`ls`;</code>
Construire un bootstrapper de projet:
Créons un outil (bootstrap-tool.mjs
) qui automatise la configuration du projet:
import { $, argv, cd, chalk, fs, question } from "zx"; import path from "path"; import which from "which";
function exitWithError(msg) { console.error(chalk.red(msg)); process.exit(1); }
git
, node
, npx
): async function checkRequiredProgramsExist(programs) { ... }
--directory
Argument: Vérifiez s'il existe et est un répertoire valide, alors cd()
.
user.name
). user.email
await $
;
package.json
), invite pour le système de module (npm init -y
ou commonjs
) et mettre à jour module
. package.json
.gitignore
et npx gitignore
. npx mrm
Questions fréquemment posées (FAQ):
La section FAQ fournie est déjà complète et bien écrite. Aucun changement n'est nécessaire.
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!