>本文探讨了Google的ZX库,这是一种在Node.js项目中简化外壳脚本的强大工具。 我们将构建一个命令行实用程序来引导新的Node.js项目,展示ZX的功能。
Google ZX的关键优势
$
(用于命令执行),cd()
>,question()
,并访问流行的库(例如,chalk
,minimist
,fetch
,fs-extra
,传统外壳脚本的挑战:
>
>传统的外壳脚本(bash,zsh)可能很麻烦。 管理儿童流程,逃避参数和处理Stdout/stderr增加了复杂性。 虽然Bash提供内置功能,但其语法对于复杂的逻辑或用户输入处理的直觉可能较低。 Node.js在提供核心模块和JavaScript的灵活性时需要手动子过程管理,从而使其变得不那么直接。>
Google的ZX:一个解决方案:
>先决条件:
ZX的工作方式:
核心函数是。 例如:
此执行$
并捕获输出。 ZX利用标记的模板文字进行干净的语法。 其他有用的功能包括用于更改目录的
<code class="language-javascript">import { $ } from "zx"; await $`ls`;</code>。 它还集成了流行的库,例如
(用于彩色输出)和ls
>(用于命令行参数解析)。cd()
>
question()
chalk
> Hello World with Zx:minimist
创建一个项目:
>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:typeScript需要tsconfig.json
(例如,"compilerOptions": {"target": "es2017", "module": "commonjs"}
)和包装await
<code class="language-javascript">import { $ } from "zx"; await $`ls`;</code>
构建一个项目bootstrapper:
bootstrap-tool.mjs
导入必要的模块:
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
hander async function checkRequiredProgramsExist(programs) { ... }
参数:检查它是否存在并且是有效的目录,然后进入其中。--directory
,cd()
)。user.name
git inituser.email
await $
(使用;
),Module System(package.json
。
npm init -y
>提示并安装NPM软件包(带有验证)。commonjs
>
module
生成配置文件(package.json
,EditorConfig,Pretitier,Eslint)使用.gitignore
提交对git的更改。npx gitignore
npx mrm
提供的常见问题解答部分已经全面且写得很好。 不需要更改。
以上是如何使用Google ZX库中的节点编写shell脚本的详细内容。更多信息请关注PHP中文网其他相关文章!