文章目录
- sindresorhus/execa:更易用的 Node.js 进程执行工具
- 1、这玩意儿是干嘛的
- 2、为什么要用它
- 3、核心特性
- 4、安装使用教程
- 5、适合哪些人用
sindresorhus/execa:更易用的 Node.js 进程执行工具
execa 在 GitHub 上已经拿到 7.5k Star 了。
这个工具基于 Node.js 原生 child_process 模块封装,专门优化程序执行场景的使用体验。
1、这玩意儿是干嘛的
它在脚本、应用或者库中运行命令,针对编程场景做了优化,没有原生模块的使用门槛。
2、为什么要用它
用原生 child_process 执行命令会遇到很多问题:参数需要转义,shell 注入风险,Windows 兼容性差,错误信息不明确,输出处理麻烦。不同场景还要写不同的处理逻辑,复用成本高。
execa 把这些问题都做了封装,不管是简单的命令执行还是复杂的流处理,都提供统一的 API,不用再处理底层细节。
3、核心特性
- 支持 Promise 和模板字符串语法,和 zx 使用体验类似
- 不需要转义或者引号,没有 shell 注入风险
- 可以直接执行本地安装的二进制文件,不用加 npx
- 优化 Windows 系统支持,包括 shebang、PATHEXT 识别、优雅终止等
- 提供详细错误信息、verbose 模式和自定义日志,方便调试
- 支持多个子进程管道连接,可以获取中间结果,支持多源输入和多目的地输出
- 输出可以自动分割为文本行,支持逐行迭代处理
- 支持几乎所有输入类型:文件、字符串、Uint8Array、可迭代对象、流等
- 支持父子进程之间消息交换
- 保证子进程在当前进程意外退出时也能正常终止
4、安装使用教程
安装:
npminstallexeca简单使用示例:
import{execa}from'execa';const{stdout}=awaitexeca`npm run build`;// 打印命令输出console.log(stdout);脚本模式:
import{$}from'execa';const{stdout:name}=await$`cat package.json`.pipe`grep name`;console.log(name);constbranch=await$`git branch --show-current`;await$`dep deploy --branch=${branch}`;执行本地二进制:
awaitexeca({preferLocal:true})`eslint`;管道多个子进程:
const{stdout}=awaitexeca`npm run build`.pipe`sort`.pipe`head -n 2`;console.log(stdout);5、适合哪些人用
- 开发 Node.js 脚本,需要频繁执行系统命令的开发者
- 构建工具、CI/CD 流程的开发者,需要处理命令执行和输出
- 需要做进程间通信、流处理的 Node.js 应用开发者
- 希望简化命令执行逻辑,降低代码维护成本的团队
开源地址:https://github.com/sindresorhus/execa
- 希望简化命令执行逻辑,降低代码维护成本的团队
开源地址:https://github.com/sindresorhus/execa