+
80
-

如何在js中编写运行linux脚本命令?

如何在js中编写运行linux脚本命令?


网友回复

+
0
-

zx.js 是 google 团队出品的一个用Javascript编写脚本命令的三方库

zx的出现,给前端开发者拥有了极好的体验。因为我们可以使用 Javascript 去编写脚本命令。

1、安装

npm i -g zx

// or

yarn 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 的模块引入机制

我知道答案,我要回答