跳至内容

CLI 用法

Zx 提供了一个 CLI 用于运行脚本。它随软件包一起提供,可以作为 zx 可执行文件使用(如果在 package.json 的 "scripts" 中引用,全局安装,或以某种方式添加到 $PATH 中)。

sh
zx script.mjs

npxnode 初始化也是有效的。

sh
npx zx script.mjs
node -r zx/globals script.mjs
node --import zx/globals script.mjs

无扩展名

如果脚本没有文件扩展名(例如 .git/hooks/pre-commit),zx 假定它是一个 ESM 模块,除非指定了 --ext 选项。

非标准扩展名

zx 在内部通过 import API 加载脚本,因此您可以使用运行时(nodejs、deno、bun)支持的任何扩展名,或者应用自定义加载器。但是,如果脚本具有非 js 类的扩展名 (/^\.[mc]?[jt]sx?$/) 并且指定了 --ext,则将使用它。

bash
zx script.zx           # Unknown file extension "\.zx"
zx --ext=mjs script.zx # OK

Markdown

CLI 支持 markdown 文件并将 tsjsbash 代码块解释为脚本。

bash
zx docs/markdown.md

远程脚本

如果 zx 可执行文件的参数以 https:// 开头,则将下载并执行该文件。

bash
zx https://medv.io/game-of-life.js

来自 stdin 的脚本

zx 支持从 stdin 执行脚本。

js
zx << 'EOF'
await $`pwd`
EOF

--eval

将以下参数评估为脚本。

bash
cat package.json | zx --eval 'const v = JSON.parse(await stdin()).version; echo(v)'

--repl

REPL 模式下启动 zx。

--install

js
// script.mjs:
import sh from 'tinysh'

sh.say('Hello, world!')

--install 标志添加到 zx 命令以自动安装缺少的依赖项。

bash
zx --install script.mjs

您还可以通过在导入后添加带有 @ 的注释来指定所需的版本。

js
import sh from 'tinysh' // @^1

--registry

默认情况下,zx 使用 https://registry.npmjs.org 作为注册表。 如果需要,可以自定义。

bash
zx --registry=https://registry.yarnpkg.com script.mjs

--quiet

禁止任何输出。

--verbose

启用详细模式。

--shell

指定自定义 shell 二进制文件路径。 默认情况下,zx 引用 bash

bash
zx --shell=/bin/another/sh script.mjs

--prefer-local, -l

优先使用本地安装的软件包和二进制文件。

bash
zx --prefer-local=/external/node_modules/or/nm-root script.mjs

--prefix & --postfix

将命令附加到每个命令的开头或结尾。

bash
zx --prefix='echo foo;' --postfix='; echo bar' script.mjs

--cwd

设置当前工作目录。

bash
zx --cwd=/foo/bar script.mjs

--env

指定一个 env 文件。

bash
zx --env=/path/to/some.env script.mjs

当指定 cwd 选项时,它将用作基本路径
--cwd='/foo/bar' --env='../.env'/foo/.env

--ext

覆盖默认脚本扩展名 (.mjs)。

--version, -v

打印当前的 zx 版本。

--help, -h

打印帮助信息。

环境变量

所有先前提到的选项都可以通过相应的 ZX_ 前缀环境变量来设置。

bash
ZX_VERBOSE=true ZX_SHELL='/bin/bash' zx script.mjs
yaml
steps:
  - name: Run script
    run: zx script.mjs
    env:
      ZX_VERBOSE: true
      ZX_SHELL: '/bin/bash'

__filename & __dirname

ESM 模块中,Node.js 不提供 __filename__dirname 全局变量。由于这样的全局变量在脚本中非常方便,因此 zx 提供了这些全局变量,以便在 .mjs 文件中使用(当使用 zx 可执行文件时)。

require()

ESM 模块中,未定义 require() 函数。 zx 提供了 require() 函数,因此它可以与 .mjs 文件中的导入一起使用(当使用 zx 可执行文件时)。

js
const {version} = require('./package.json')

免责声明:这不是正式支持的 Google 产品。