跳到内容

FAQ

传递环境变量

js
process.env.FOO = 'bar'
await $`echo $FOO`

传递值数组

当将值数组作为参数传递给 $ 时,数组的每一项将被单独转义,并通过空格连接。

示例

js
const files = [...]
await $`tar cz ${files}`

导入到其他脚本中

可以通过显式导入来使用 $ 和其他函数

js
#!/usr/bin/env node
import {$} from 'zx'

await $`date`

附加配置文件

默认情况下,child_process 不包含别名和 bash 函数。 但是你仍然可以通过手动方式实现。 只需将必要的指令附加到 $.prefix

js
$.prefix += 'export NVM_DIR=$HOME/.nvm; source $NVM_DIR/nvm.sh; '
await $`nvm -v`

使用 GitHub Actions

默认的 GitHub Action runner 已经安装了 npx

yaml
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
#      - uses: actions/setup-node@v4
#        with:
#          node-version: 22

      - name: Build with zx
        env:
          FORCE_COLOR: 3
        run: |
          npx zx <<'EOF'
          await $`...`
          EOF

详细和静默

zx 具有内部日志记录器,当满足条件时会捕获事件

事件详细静默描述
stdouttruefalse生成进程的 stdout
stderr任何false进程 stderr 数据
cmdtruefalse命令执行
fetchtruefalse通过 http(s) 获取资源
cdtruefalse更改目录
retrytruefalse捕获 exec 错误
customtruefalse用户定义的事件

默认情况下,$.verbose$.quiet 选项均为 false,因此仅写入 stderr 事件。 任何输出都会进入 process.stderr 流。

您可以全局或就地控制此流程

js
// Global debug mode on
$.verbose = true
await $`echo hello`

// Suppress the particular command
await $`echo fobar`.quiet()

// Suppress everything
$.quiet = true
await $`echo world`

// Turn on in-place debug
await $`echo foo`.verbose()

您也可以使用自己的记录器覆盖默认记录器

js
// globally
$.log = (entry) => {
  switch (entry.kind) {
    case 'cmd':
      console.log('Command:', entry.cmd)
      break
    default:
      console.warn(entry)
  }
}
// or in-place
$({log: () => {}})`echo hello`

Canary / Beta / RC 构建

急切的早期采用者可以尝试实验性的 zx 版本。 但请记住:这些构建在各个方面都是 ⚠️️__beta__。

bash
npm i zx@dev
npx zx@dev --install --quiet <<< 'import _ from "lodash" /* 4.17.15 */; console.log(_.VERSION)'

免责声明:这不是 Google 官方支持的产品。