gulp-exec子进程立即关闭

时间:2017-03-21 06:52:07

标签: node.js gulp exec

如果你不熟悉icecast,它就是一台多媒体服务器。

当我在终端中运行icecast -c ./icecast/icecast.xml时,会启动一个可以保持活力的冰球服务器。

所以每次运行gulp时,我都希望在我的node.js进程旁边运行该命令。

我在gulpfile中添加了以下内容。

import exec from 'gulp-exec'

...

const icecastDir = path.resolve(`${__dirname}/icecast/`)

...

gulp.task(`icecast`, () => {
  return exec(`/usr/local/bin/icecast -c ${icecastDir}/icecast.xml`)
    .on(`data`, () => {
      console.log(`data`)
    }) 
    .on(`error`, () => {
      console.log(`error`)
    }) 
    .on(`end`, () => {
      console.log(`end`)
    }) 
    .on(`close`, () => {
      console.log(`error`)
    }) 
    .on(`readable`, () => {
      console.log(`readable`)
    }) 
})

当我在终端中运行命令gulp icecast时,gulp说Starting 'icecast'...然后立即终止。没有回调发射。我真的希望它能活着,直到我知道gulp过程。

我觉得我缺少关于gulp如何工作的一些基本知识,但我在gulp(或gulp-exec)文档中找不到任何提及这些主题的内容。

1 个答案:

答案 0 :(得分:1)

我有一个非常类似的问题,并注意到gulp-exec page has a note警告说,如果你只想运行一个命令,你应该使用Node的child_process.exec

运行exec(command)立即退出流程;但是,当我尝试gulp-exec页面中指定的语法时,其中包含一个回调:

var exec = require('child_process').exec;

gulp.task('task', function (cb) {
  exec('ping localhost', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
})

它现在使这个过程保持活力。我不需要stdout和stderr输出,所以设法逃脱:

var exec = require('child_process').exec;

gulp.task('task', function (cb) {
  exec('ping localhost', function (e) { cb(e); });
})

我不熟悉Node,只是分享对我有用的东西;我希望这个解决方案可以解决您的问题。