execa
工具说明 && demo
- This package improves child_process methods with
- 对 child_process 改进了方法
- execa 是一个用于执行外部进程的 Node.js 模块,它提供了比 Node.js 内置的 child_process 模块更简单和强大的 API。通过 execa,你可以方便地执行外部命令,并获取输出、错误信息以及其他相关信息。
javascript
import { $, execa } from "execa";
const { stdout: branch } = await $`git branch --show-current`;
console.log(branch); // main 获取到分支名称
await execa("echo", ["zijieyuan output"]).pipeStdout("stdout.txt"); // 打印输出到stdout.txt文件中
const { stdout } = await execa("ls", ["-l", "-a"]);
console.log(stdout); // 输出当前目录下的所有文件和文件夹
同类型工具
工具库 | 描述 |
---|---|
execa | 用于执行外部进程的 Node.js 模块,提供简单和强大的 API |
child_process | Node.js 自带的模块,用于创建子进程并执行外部命令 |
shelljs | 用于在 Node.js 中执行 shell 命令的模块,提供简洁的 API |
cross-spawn | 跨平台的子进程管理工具,可以在 Node.js 中安全地执行命令 |
node-cmd | 简单的 Node.js 模块,用于执行 shell 命令 |
npm-run | 用于在 Node.js 中执行 npm 脚本的模块,方便运行 package.json 中定义的脚本命令 |
spawn-command | 简单的 Node.js 模块,用于执行 shell 命令,并提供了一些额外的功能 |
shell-exec | 轻量级的模块,用于在 Node.js 中执行 shell 命令,支持异步和同步执行 |
- 原理都是调用 child_process 来实现命令调用
javascript
// child_process
const { exec } = require("child_process");
exec("ls -l", (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
javascript
// shelljs
const shell = require("shelljs");
shell.cp("-R", "source/dir", "dest/dir");
javascript
// cross-spawn
const crossSpawn = require("cross-spawn");
const ls = crossSpawn.sync("ls", ["-lh", "/usr"]);
console.log("stdout here: \n", ls.stdout.toString());
javascript
// node-cmd
const cmd = require("node-cmd");
cmd.get("ls -lh", function (err, data, stderr) {
console.log("the current working dir is : ", data);
});
javascript
// npm-run
const npmRun = require("npm-run");
npmRun.exec("start", function (err, stdout, stderr) {
console.log(stdout);
});
javascript
// spawn-command
const spawnCommand = require("spawn-command");
const command = spawnCommand("ls -lh");
command.on("error", (err) => {
console.error("Failed to start subprocess.", err);
});
command.stdout.on("data", (data) => {
console.log(`stdout: ${data}`);
});
javascript
// shell-exec
const shellExec = require("shell-exec");
(async () => {
const result = await shellExec("ls -lh");
console.log(result);
})();