当前位置:首页 > 应用开发

几天狂增 1.1 万 Star!谷歌这个脚本工具必须推荐一波

 

zx 是天狂一个更方便、更友好帮助开发者写脚本的增万工具。有 Google “爸爸”的谷歌个脚光环加持,该工具短短几天在 GitHub 上就破万 Star 了。本工

简介

Bash 很好,具必荐波但是须推在编写脚本的时候,人们通常会选择一种更方便的天狂编程语言,JavaScript 就是增万一个很完美的选择。但是亿华云谷歌个脚标准的 Node.js 库在使用之前需要许多额外的操作,比如安装、本工引入库等,具必荐波zx 提供一个包装器 child_process,须推用于转义参数并提供合并的天狂默认值。

#!/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}` 

项目地址是:

https://github.com/google/zx

安装使用

安装

npm i -g zx 

简单使用。将编写的谷歌个脚脚本放在 .mjs 后缀的文件中,或者使用 .js 后缀,但是需要 void async function () { ...}() 对脚本进行包装。服务器托管

脚本需要包含以下文件头:

#!/usr/bin/env zx 

运行脚本(需要先添加执行权限):

chmod +x ./script.mjs ./script.mjs // 或者使用这个命令 zx ./script.mjs 

常用命令

使用child_process包中提供的exec函数可以把字符串当做命令执行,并返回Promise<ProcessOutput>对象。

let count = parseInt(await $`ls -1 | wc -l`) console.log(`Files count: ${ count}`) 

例如,并行上传文件:

let hosts = [...] await Promise.all(hosts.map(host => $`rsync -azP ./src ${ host}:/var/www` )) 

如果执行脚本返回非0状态码,将会抛出ProcessOutput对象:

try {  await $`exit 1` } catch (p) {  console.log(`Exit code: ${ p.exitCode}`) console.log(`Error: ${ p.stderr}`) } 

抛出ProcessOutput对象结构如下:

class ProcessOutput {  readonly exitCode: number readonly stdout: string readonly stderr: string toString(): string } 

cd(),修改工作路径:

cd(/tmp) await $`pwd` // outputs /tmp 

fetch(),对node-fetch包的包装:

let resp = await fetch(http://wttr.in) if (resp.ok) {  console.log(await resp.text()) } 

question(),对readline包的包装:

type QuestionOptions = {  choices: string[] } function question(query: string, options?: QuestionOptions): Promise<string> 

用法:

let username = await question(What is your username? ) let token = await question(Choose env variable: , {  choices: Object.keys(process.env) }) 

chalk包,不需要导入就可以直接用

console.log(chalk.blue(Hello world!)) 

fs包,需要导入就可以直接用

let content = await fs.readFile(./package.json) 

Promisified默认被引入了,相当于写了以下代码:

import { promises as fs} from fs 

os包,需要导入就可以直接用

await $`cd ${ os.homedir()} && mkdir example` 

zx可以从其他脚本导入:

#!/usr/bin/env node import { $} from zx await $`date` 

传递环境变量:

process.env.FOO = bar await $`echo $FOO` 

执行远程脚本:

zx https://medv.io/example-script.mjs 

分享到:

滇ICP备2023006006号-16