gpt4 book ai didi

node.js - gulp-exec 子进程立即关闭

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:35 24 4
gpt4 key购买 nike

如果您不熟悉icecast,它是一个多媒体服务器。

当我在终端中运行 icecast -c ./icecast/icecast.xml 时,它会启动一个保持事件状态的icecast 服务器。

所以我想在每次运行 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'...,然后立即终止。没有回调触发。我真的希望它能够一直存在,直到我使用 cmd-c 执行 gulp 进程。

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

最佳答案

我有一个非常类似的问题,并注意到 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,只是分享对我有用的东西;我希望这个解决方案能够解决您的问题。

关于node.js - gulp-exec 子进程立即关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42920222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com