Node.js 有一个内置 child_process
模块。它提供了一些方法,允许我们编写在子进程中运行命令的脚本。
这些命令可以运行安装在我们运行脚本的机器上的任何程序。
什么是 execa?
execa
为 child_process
模块提供了一个包装器,以便于使用。
本文将介绍 execa
的好处,以及如何使用它。
使用 execa
的好处
execa
相对于内置的 Node.js child_process
模块有几个好处。
首先,execa
公开了一个基于 promise 的 API。这意味着我们可以在代码中使用 async/await
,而不需要像使用异步 child_process
模块方法那样创建回调函数。如果我们需要它,还有一个 execaSync
方法可以同步运行命令。
execa
还可以方便地转义并引用我们传递给它的任何命令参数。例如,如果我们传递一个带有空格或引号的字符串,execa
将为我们处理转义。
程序在输出的末尾添加一行新行是很常见的。这有利于命令行的可读性,但在脚本上下文中没有帮助,因此默认情况下,execa
会自动为我们删除这些新行。
如果执行脚本(node
)的进程因任何原因死掉,我们可能不希望子进程挂起。execa
会自动为我们清理子进程,确保我们不会出现“僵尸”进程。
使用 execa
的另一个好处是,它支持在 Windows 上使用 Node.js 运行子进程。它使用了流行的 cross-spawn
包,该包可以解决 Node.js 的已知问题。
开始使用 execa
创建并切换到 tutorial
目录:
$ mkdir execa-test
$ cd execa-test
初始化项目:
$ npm init -y
安装 execa
$ npm i execa