zx 库在 Node 中编写 Shell 脚本

133 阅读2分钟

github.com/google/zx

创建一个 shell 脚本——一个由诸如 Bash 或 zsh 之类的 shell 执行的脚本——可以是自动化重复任务的好方法。Node.js 似乎是编写 shell 脚本的理想选择,因为它为我们提供了许多核心模块,并允许我们导入我们选择的任何库。它还使我们能够访问 JavaScript 提供的语言特性和内置函数。

Google 的 zx库有助于使用 Node.js 高效且愉快地编写 shell 脚本。

Google ZX是谷歌公司推出的一种快速、高效、可靠的JavaScript构建工具。它可以帮助开发人员在编写和构建现代Web应用程序时提高开发效率和代码质量。本文将介绍Google ZX的主要特点、优点以及使用方法。

Google ZX的主要特点

Google ZX是一个基于Node.js的构建工具,它具有以下主要特点:

  1. 简单易用:Google ZX使用简单易懂的API和命令行工具,可以帮助开发人员快速构建和部署Web应用程序。
  2. 高效性:Google ZX采用了多进程构建技术,可以快速、高效地构建大型Web应用程序。
  3. 可靠性:Google ZX具有强大的错误处理和调试功能,可以帮助开发人员快速发现和解决问题。
  4. 可扩展性:Google ZX可以与其他工具和框架集成,可以方便地扩展和定制。

使用Google ZX的方法

要使用Google ZX,您需要先安装Node.js。然后,在命令行中运行以下命令来安装Google ZX:

npm install -g zx

安装完成后,您可以使用Google ZX构建和运行JavaScript代码。例如,以下命令将运行一个名为script.js的JavaScript文件:

zx script.js

除此之外,Google ZX还提供了许多其他命令和API,可以帮助开发人员构建和部署Web应用程序。

#!/usr/bin/env zx

// 获取package.json中的name
await $`cat package.json | grep name`

// git 的调用
let branch = await $`git branch --show-current`
await $`dep deploy --branch=${branch}`

await Promise.all([
  $`sleep 1; echo 1`,
  $`sleep 2; echo 2`,
  $`sleep 3; echo 3`,
])
// 生成文件夹
let name = 'foo bar'
await $`mkdir /tmp/${name}`

使用

在扩展名为.mjs的文件中编写脚本,以便在顶层使用await。如果您更喜欢.js扩展,请将脚本包装为类似void async函数(){…}()的格式。

添加到zx脚本的开头:

#!/usr/bin/env zx

demo:

#!/bin/sh
set -e
cd `dirname $0` && cd ../

package_version() {
echo $(cat package.json | awk '/"version"/ {print}' | awk 'BEGIN {FS="""} /"version"/ {print $4}')
}

CURRENT_VERSION=$(package_version)
echo "当前版本号:$CURRENT_VERSION"

# 上传
npx tal-oss upload --uploadFrom=dist --uploadTo=$CURRENT_VERSION --config=tal-oss.config.json
echo "已上传"

# git tag
git tag $CURRENT_VERSION
git push origin $CURRENT_VERSION

使用zx:

#!/usr/bin/env zx

cd(`dirname $0`)
cd(`../`)

const packageVersion = JSON.parse(await readFile('package.json')).version
console.log(`当前版本号:${packageVersion}`)

// 上传
await $`npx tal-oss upload --uploadFrom=dist --uploadTo=${packageVersion} --config=tal-oss.config.json`
console.log('已上传')

// git tag
await $`git tag ${packageVersion}`
await $`git push origin ${packageVersion}`