子进程child_process的spawn模块使用

child_process介绍

使用

  1. 在package.json添加运行指令
{
  "scripts": {
    "start": "node start.js"
  }
}
  1. 同package.json同级新建一个start.js文件
/**
 * @desc 使用yarn start可以启动打包后的dist项目,查看打包好的文件
*/
const { spawn } = require('child_process')

const isWin32 = process.platform === 'win32'
const child = spawn(isWin32 ? 'live-server.cmd' : 'live-server', {
  cwd: './'
})
// stdout 获取标准输出
child.stdout.on('data', data => {
  console.log(`stdout: ${data}`)
})
// stderr 获取标准错误输出
child.stderr.on('data', data => {
  console.error(`stderr: ${data}`)
})
child.on('close', code => {
  console.log(`子进程退出,退出码: ${code}`)
  downLiveServer()
})
child.on('error', code => {
  console.log(`子进程错误,错误码 ${code}`)
  // downLiveServer()
})

/**
 * @desc 如果没有安装live-server,则开启进程安装包
*/
function downLiveServer () {
  // const child = spawn(isWin32 ? 'npm.cmd' : 'npm', ['install', '-D', 'live-server'])
  const child = spawn(isWin32 ? 'yarn.cmd' : 'yarn', ['add', '-D', 'live-server'])
  child.stdout.on('data', data => {
    console.log(`live-server stdout: ${data}`)
  })
  child.stderr.on('data', data => {
    console.log(`live-server stderr: ${data}`)
  })
  child.on('close', code => {
    console.log(`live-server进程退出,退出码: ${code}`)
  })
  child.on('error', code => {
    console.log(`live-server进程错误,错误码 ${code}`)
  })
}

遇到的问题

spawn中执行live-server命令时报错 [Error: spawn ENOENT]” errors

原因:windows下live-server执行名不同

解决方案:

判断是不是win32平台
const isWin32 = process.platform === ‘win32’
不同平台使用不同命令,即 isWin32 ? ‘live-server.cmd’ : ‘live-server’

你可能感兴趣的:(node.js,child_process,spawn)