本文介绍在 Node.js 中执行系统命令的两种主流方案。首先详解原生 child_process 模块中的 exec、execFile、fork 及其同步版本,涵盖异步回调与阻塞处理。其次介绍 npm 包 shelljs 的安装与用法,通过同步与异步两种方式演示如何执行 git 等命令并判断执行状态,为前端工程化提供实用参考。
引言
在前端工程化的开发流程中,开发者常需在 JavaScript 脚本里调用 node、npm 或其他 shell 命令。本文将详细阐述两种在 node 环境中调用 shell 命令的具体方法。

一、Node.js 原生模块:child_process
Node.js 原生 API 介绍:child_process.exec() 方法用于衍生一个 shell 进程并在其中运行指定命令,命令执行完毕后,通过回调函数将标准输出(stdout)和标准错误(stderr)返回。
child_process.execFile() 方法与 类似,但其主要区别在于默认情况下它直接衍生目标命令,而不先启动 shell 进程。
child_process.fork() 方法用于衍生一个新的 Node.js 进程,并利用建立的 IPC(进程间通信)通道调用指定的模块,该通道允许父子进程之间相互发送消息。
child_process.execSync() 是 的同步版本,执行时会阻塞 Node.js 的事件循环,直到命令执行完毕。
child_process.execFileSync() 是 的同步版本,同样会阻塞 Node.js 的事件循环,直至命令完成。
使用示例
const process = require("child_process");
// 执行 npm run build 命令
;(function() {
process.exec('npm run build', (error, stdout, stderr) => {
if (!error) {
// 成功
} else {
// 失败
}
});
})();
二、npm 第三方库:shelljs
- 安装方法
npm i -D shelljs
- 使用示例
const shell = require('shelljs');
// 同步
// 执行 git status 命令
const { code } = shell.exec('git status');
/*
* 返回一个对象
* 可以根据 code 值来判断当前命令是否执行成功
* code === 0 代表成功
* */
// 异步回调
// 执行 git add . 命令
shell.exec('git add .', function(code, stdout, stderr) {
console.log('Exit code:', code);
console.log('Program output:', stdout);
console.log('Program stderr:', stderr);
if (code===0) {
console.log('成功')
// do something
}
});
参考文档:
http://nodejs.cn/api/child_process.html
https://www.npmjs.com/package/shelljs
以上即为 Node.js 执行 cmd 或 shell 命令的详细介绍,更多关于 Node.js 执行 cmd 和 shell 命令的资料,敬请关注本站后续发布的其他相关文章!