1.说明

child_process 模块是 Node.js 的原始模块:

  1. 主要作用:执行命令行命令
  2. 该模块的功能主要由 child_process.spawn() 函数提供

2.区分exec和spawn

2-1 exec执行命令

const {
  exec
} = require('child_process');
exec('ls -la /usr', (error, stdout, stderr) => {
  console.log(error);
  console.log(stdout);
  console.log(stderr);
});
  • 第一个参数是将要执行的命令,命令之间的参数使用空格分开
  • 第二个参数是回调函数,有三个参数
回调中的第一个参数:命令执行错误会有值,否则为null
回调中的第二个参数:子进程的正常输出内容
回调中的第三个参数:子进程执行错误的输出

2-2 spawn命令

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

const ls = spawn('ls', ['-la', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`子进程退出码:${code}`);
});
  • 第一个参数是命令
  • 第二个参数是一个数组,数组中的每一个元素是执行命令需要的参数

需要特别注意的是,需要获取执行的内容需要通过流的形式来进行输出

2-3 两者对比

相同点:

  • 都可以用来执行命令行命令

不同点:

  • exec 用来执行命令,命令和命令后跟的参数是写在一个字符串中,作为函数的第一个参数
  • spawn 用来执行命令,命令和命令后跟的参数是分开写的
  • exec 的输出内容是在回调中输出的,一次性分配 200K 大小的内存空间,如果超出这个大小会报错
  • spawn 的输出内容是通过流的形式进行输出的,没有分配空间,不会报错

总结:spawn 比 exec 使用范围要广,因此,能使用 spawn 的尽量使用 spawn。


沫俱宏
763 声望33 粉丝

自己的肯定最重要,做任何决定,一定要从内心出发


下一篇 »
重读 Gulp