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 的模块引入机制
网友回复
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?
js在浏览器中如何使用MediaStream与MediaRecorder实现声音音频多轨道混流?