zx.js 是 google 团队出品的一个用Javascript编写脚本命令的三方库
zx的出现,给前端开发者拥有了极好的体验。因为我们可以使用 Javascript 去编写脚本命令。1、安装
npm i -g zx
// oryarn add -g zx
要求 Node.js >= 14.13.0
2、编写脚本
起步为了更好使用,我们需要将我们的.js后缀改写为.mjs,同时在package.json中添加
"type": "module"
然后我们需要在我们的脚本文件开头(顶部)添加特殊注释标记为 zx 脚本,完整的示例代码如下:
#!/usr/bin/env zx
await $`cat package.json | grep name`
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}`
上面代码来自 Github readme 首页,我们分析一下源码:
文档格式是 bash 风格,一行一条命令。第一行是 bash 的 Shebang。指定解释器,即这个脚本必须通过什么解释器执行。这一行以 #! 字符开头,这个字符称为 Shebang,所以这一行就叫做 Shebang 行。
文档写法是 js 语言,看到很多熟悉的 js 关键词,比如 await、promise、let 等
内置方法 $, cd, fetch等,可以直接使用,不需要手动引入
有好几个地方出现了类似这种写法$`mkdir /tmp/${name}` 这个是字符串的标签模版。
模板字符串的功能,不仅仅是*${}*类型的变量替换。它可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能(tagged template)。
3. 内置函数
$ 函数使用 zx 规定脚本写入扩展名为 .mjs 的文件中,以便能够在顶层使用 await。如果习惯于 .js 扩展名,需要将脚本包装在类似 void async function () {...}() 中。
cd:允许更改当前的工作目录
question:Node.js 的 readline 模块的包装器,可以直接提示用户输入。
chalk:允许为脚本的输出添加颜色。
minimist:解析命令行参数的库,将它们暴露在 argv 对象下。
fetch/ node-fetch:与浏览器中 fetch 有着相同的 API, 可创建 HTTP 请求。
sleep 是 setTimeout 的封装
fs/ fs-extra:公开了 Node.js 核心 fs 模块,以及许多其他方法,可以更轻松地使用文件系统。
globby 以用户友好模式来匹配给定的文件名。
yaml 解析 yaml 文件
path 就是系统 path 包
os 就是系统 os 包
minimist 全局常量 argv
require node.js 的模块引入机制
网友回复
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?