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 具有内部日志记录器,当满足条件时会捕获事件
事件 | 详细 | 静默 | 描述 |
---|---|---|---|
stdout | true | false | 生成进程的 stdout |
stderr | 任何 | false | 进程 stderr 数据 |
cmd | true | false | 命令执行 |
fetch | true | false | 通过 http(s) 获取资源 |
cd | true | false | 更改目录 |
retry | true | false | 捕获 exec 错误 |
custom | true | false | 用户定义的事件 |
默认情况下,$.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)'