Skip to content

child_process

child_process 模块可以在 Node.js 中执行外部命令(比如终端命令),适合在构建脚本中调用编译、复制文件等命令。这个模块的核心方法有三种:

  • exec:用于执行简单的命令,返回完整的命令输出。
  • execSync:和 exec 类似,但以同步方式运行,适合在脚本中逐步执行命令。
  • spawn:用于处理流数据的场景,可以监听输出,非常适合执行持续输出的命令(如启动服务器)。

使用 exec 执行命令(异步)

js
const { exec } = require('child_process')

// 执行 `pnpm build` 命令
exec('pnpm build', (error, stdout, stderr) => {
  if (error) {
    console.error(`执行出错: ${error}`)
    return
  }
  console.log(`标准输出: ${stdout}`)
  console.error(`标准错误输出: ${stderr}`)
})

说明:

  • exec 执行命令后立即返回。执行结果通过回调函数接收,适合需要获取完整输出的场景。
  • stdout 和 stderr 分别包含命令的标准输出和错误输出。

使用 execSync 执行命令(同步)

js
const { execSync } = require('child_process')

try {
  // 同步执行 `pnpm build` 命令
  const output = execSync('pnpm build', { stdio: 'inherit' })
  console.log(`命令输出: ${output}`)
} catch (error) {
  console.error(`执行出错: ${error}`)
}

说明:

  • execSync 同步执行命令,直到命令结束才继续执行后续代码,适合依赖前一命令结果的情况。
  • { stdio: 'inherit' } 会将子进程的输出和父进程同步。

使用 spawn 执行命令(异步、适合流式输出)

spawn 方法更灵活,可监听命令的实时输出和错误,适合处理大量输出或持续运行的命令(如启动服务器)。

js
const { spawn } = require('child_process')

// 执行 `pnpm build` 命令
const child = spawn('pnpm', ['build'])

child.stdout.on('data', data => {
  console.log(`输出: ${data}`)
})

child.stderr.on('data', data => {
  console.error(`错误输出: ${data}`)
})

child.on('close', code => {
  console.log(`进程退出,退出码: ${code}`)
})

说明:

  • spawn 的第一个参数是命令名,后面的参数是一个数组,包含命令的参数。
  • 可以通过监听 data 事件获取实时输出。

基于 MIT 许可发布