我正在尝试使用以下命令在 gulp 任务中运行 shell 命令child_process.spawn
.
我必须检测任务何时完成运行,所以我正在使用stdout
检查我在命令末尾发出的特定字符串,但由于某种原因,它看起来不像我的字符串正在发出:
// gulp 3.9.1
var gulp = require('gulp');
var spawn = require('child_process').spawn;
gulp.task('my-task', function(cb) {
var command = ''; // construct my shell command here
var end = 'end_of_command';
var command = command + '; echo ' + end; // add special string to look for
var cmd = spawn(command, { shell: true });
cmd.stdout.on('data', function(data) {
if (data.includes(end)) {
return cb();
}
});
});
由于某种原因,我的 echo 语句没有发出,因此 if 语句没有被传递。
我哪里错了?
我还应该注意,当我直接在 shell 中运行此命令而不是通过 gulp 任务时,它运行良好并且预期输出可见。
Both Gulp https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-support and child_process https://nodejs.org/api/child_process.html异步函数使用 Node 风格的错误优先回调。
spawn
用于在命令执行期间处理流。如果需要的只是等待命令完成,exec
and execFile
去做:
var gulp = require('gulp');
var exec = require('child_process').exec;
gulp.task('my-task', function(cb) {
exec('cmd', cb);
});
它可能更复杂spawn
因为它还允许处理退出代码:
var gulp = require('gulp');
var spawn = require('child_process').spawn;
gulp.task('my-task', function(cb) {
spawn('cmd', [], {})
.on('error', cb)
.on('close', code => code ? cb(new Error(code)) : cb());
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)