如果你不熟悉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)文档中找不到任何提及这些主题的内容。
答案 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,只是分享对我有用的东西;我希望这个解决方案可以解决您的问题。