Запуск команды оболочки из gulp
Я хотел бы запустить команду оболочки из gulp, используя gulp-shell
. Я вижу, что следующая идиома используется gulpfile.
Является ли это идиоматическим способом запуска команды из задачи gulp?
var cmd = 'ls';
gulp.src('', {read: false})
.pipe(shell(cmd, {quiet: true}))
.on('error', function (err) {
gutil.log(err);
});
Ответы
Ответ 1
gulp-shell
был внесен в черный список. Вы должны использовать 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);
});
})
Ответ 2
Новый способ сделать это, при котором консольный вывод будет таким же (например, с цветами):
см. ниже: https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
var gulp = require('gulp');
var spawn = require('child_process').spawn;
gulp.task('my-task', function (cb) {
var cmd = spawn('cmd', ['arg1', 'agr2'], {stdio: 'inherit'});
cmd.on('close', function (code) {
console.log('my-task exited with code ' + code);
cb(code);
});
});
Ответ 3
С gulp 4 ваши задачи могут напрямую возвращать дочерний процесс, чтобы сигнализировать о завершении задачи:
'use strict';
var cp = require('child_process');
var gulp = require('gulp');
gulp.task('reset', function() {
return cp.execFile('git checkout -- .');
});
gulp-v4-running-shell-commands.md