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 的模块引入机制
网友回复
python如何实现torrent的服务端进行文件分发p2p下载?
如何在浏览器中录制摄像头和麦克风数据为mp4视频保存下载本地?
go如何编写一个类似docker的linux的虚拟容器?
python如何写一个bittorrent的种子下载客户端?
ai能通过看一个网页的交互过程视频自主模仿复制网页编写代码吗?
ai先写功能代码通过chrome mcp来进行测试功能最后ai美化页面这个流程能行吗?
vue在手机端上下拖拽元素的时候如何禁止父元素及body的滚动导致无法拖拽完成?
使用tailwindcss如何去掉响应式自适应?
有没有直接在浏览器中运行的离线linux系统?
nginx如何保留post或get数据进行url重定向?