CLI 用法
Zx 提供了一个 CLI 用于运行脚本。它随软件包一起提供,可以作为 zx 可执行文件使用(如果在 package.json 的 "scripts" 中引用,全局安装,或以某种方式添加到 $PATH 中)。
zx script.mjsnpx 或 node 初始化也是有效的。
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,则将使用它。
zx script.zx # Unknown file extension "\.zx"
zx --ext=mjs script.zx # OKMarkdown
CLI 支持 markdown 文件并将 ts、js 和 bash 代码块解释为脚本。
zx docs/markdown.md远程脚本
如果 zx 可执行文件的参数以 https:// 开头,则将下载并执行该文件。
zx https://medv.io/game-of-life.js来自 stdin 的脚本
zx 支持从 stdin 执行脚本。
zx << 'EOF'
await $`pwd`
EOF--eval
将以下参数评估为脚本。
cat package.json | zx --eval 'const v = JSON.parse(await stdin()).version; echo(v)'--repl
在 REPL 模式下启动 zx。
--install
// script.mjs:
import sh from 'tinysh'
sh.say('Hello, world!')将 --install 标志添加到 zx 命令以自动安装缺少的依赖项。
zx --install script.mjs您还可以通过在导入后添加带有 @ 的注释来指定所需的版本。
import sh from 'tinysh' // @^1--registry
默认情况下,zx 使用 https://registry.npmjs.org 作为注册表。 如果需要,可以自定义。
zx --registry=https://registry.yarnpkg.com script.mjs--quiet
禁止任何输出。
--verbose
启用详细模式。
--shell
指定自定义 shell 二进制文件路径。 默认情况下,zx 引用 bash。
zx --shell=/bin/another/sh script.mjs--prefer-local, -l
优先使用本地安装的软件包和二进制文件。
zx --prefer-local=/external/node_modules/or/nm-root script.mjs--prefix & --postfix
将命令附加到每个命令的开头或结尾。
zx --prefix='echo foo;' --postfix='; echo bar' script.mjs--cwd
设置当前工作目录。
zx --cwd=/foo/bar script.mjs--env
指定一个 env 文件。
zx --env=/path/to/some.env script.mjs当指定 cwd 选项时,它将用作基本路径--cwd='/foo/bar' --env='../.env' → /foo/.env
--ext
覆盖默认脚本扩展名 (.mjs)。
--version, -v
打印当前的 zx 版本。
--help, -h
打印帮助信息。
环境变量
所有先前提到的选项都可以通过相应的 ZX_ 前缀环境变量来设置。
ZX_VERBOSE=true ZX_SHELL='/bin/bash' zx script.mjssteps:
- 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 可执行文件时)。
const {version} = require('./package.json')