- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
背景
你还在这么写代码? 你还在用bash敲命令吗? 那你就out啦!
玩玩新花样,带来不一样的体验
js完美接入
编写脚本前,我们需要了解今天的主角
🐚zx
zx 是 google 团队出品的一个用Javascript编写脚本命令的三方库。 ---> 嗯. 真香
zx的出现,给前端开发者拥有了极好的体验。因为我们可以使用 Javascript 去编写脚本命令。正如它官方而言
Bash is great, but when it comes to writing scripts, people usually choose a more convenient programming language.
前端开发拿手的不就是 Javascript, 嗯 开整
install
npm i -g zx
// or
yarn add -g zx
要求 Node.js >= 14.13.0
编写脚本
起步
为了更好使用,我们需要将我们的.js后缀改写为.mjs,同时在package.json中添加
"type": "module"
然后我们需要在我们的脚本文件开头(顶部)添加特殊注释标记为 zx 脚本
#!/usr/bin/env zx
运行
准备功能就做好了 然后我们尝试运行程序
程序完美运行,试试bash命令呢
欧克,命令也成功运行
命令
了解zx还可以了解他的其他几个属性、方法如何使用。
最常见的的使用莫过于我们编写脚本命令,如何编写呢。
$`command`
使用包中的spawn函数 执行给定的字符串child_process并返回ProcessPromise<ProcessOutput>.
通过的一切${...}都会被自动转义和引用。
let name = 'foo & bar'
await $ `mkdir ${ name } `
无需添加额外的引号。
如果需要,您可以传递参数数组:
let flags = [
'--oneline' ,
'--decorate' ,
'--color' ,
]
await $ `git log ${ flags } `
如果执行的程序返回非零退出代码, ProcessOutput将被抛出。
try {
await $`exit 1`
} catch (p) {
console.log(`Exit code: ${p.exitCode}`)
console.log(`Error: ${p.stderr}`)
}
cd()
更改当前工作目录。
cd('/tmp')
await $`pwd` // outputs /tmp
fetch()
网络请求,fetch实际上是基于node-fetch进行开发
let resp = await fetch('http://wttr.in')
if (resp.ok) {
console.log(await resp.text())
}
question()
let q1 = await question('我帅吗?')
console.log(q1)
let q2 = await question('你要一键三连吗?', {
choices: Object.keys(process.env)
})
console.log(q2)
sleep()
类似一个 setTimeout function.
await sleep(1000)
总结
zx 完美的适应Javascript环境,基于zx的玩法也必定越来越多,也期待社区能后更多有趣的脚本。
zx引进门, 修行在个人,兄弟们,冲
接下来也会给大家分享几个有意思的脚本,敬请期待