>本文探討了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中文網其他相關文章!