我如何在 gulp 任务中 运行 shell 命令并检测它何时完成?
How can I run a shell command inside of a gulp task and detect when it's done?
我正在尝试使用 child_process.spawn
.
运行 gulp 任务中的 shell 命令
我必须检测任务何时完成 运行ning 所以我使用 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 任务时,它 运行s很好,预期的输出是可见的。
两个 Gulp and child_process
异步函数都使用 Node 风格的错误优先回调。
spawn
用于在命令执行期间处理流。如果只需要等到命令完成,exec
和 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());
});
我正在尝试使用 child_process.spawn
.
我必须检测任务何时完成 运行ning 所以我使用 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 任务时,它 运行s很好,预期的输出是可见的。
两个 Gulp and child_process
异步函数都使用 Node 风格的错误优先回调。
spawn
用于在命令执行期间处理流。如果只需要等到命令完成,exec
和 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());
});