2015-04-08 2 views
28

Я хотел бы запустить команду оболочки из gulp, используя gulp-shell. Я вижу, что следующая идиома используется в gulpfile.Запуск команды оболочки из gulp

Является ли это идиоматическим способом выполнения команды из задачи gulp?

var cmd = 'ls'; 
gulp.src('', {read: false}) 
    .pipe(shell(cmd, {quiet: true})) 
    .on('error', function (err) { 
     gutil.log(err); 
}); 

ответ

76

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

Как выполнить две команды оболочки? –

+20

'gulp-shell был занесен в черный список': Что вы подразумеваете под этим? – Laoujin

+22

Gulp имеет черный список пакетов, которые не написаны «способом Gulp». Посмотрите список здесь: https://github.com/gulpjs/plugins/blob/master/src/blackList.json – ddprrt

28

новый способ сделать это, что держит консольный вывод такой же, (например, с цветами):

см: 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); 
 
    }); 
 
});

+2

Но будьте осторожны, если вы находитесь в Windows, так как spawn() не работает надежно, см. [this Node issue] (https:// гиты ub.com/nodejs/node-v0.x-archive/issues/2318) –

+0

Это лучший ответ imo +1 – chukkwagon

7

С gulp 4 ваших задач может непосредственно возвращать дочерний процесс, чтобы сигнализировать о завершении задачи:

'use strict'; 

var cp = require('child_process'); 
var gulp = require('gulp'); 

gulp.task('reset', function() { 
    return cp.execFile('git checkout -- .'); 
}); 

https://github.com/gulpjs/gulp/blob/4.0/docs/recipes/running-shell-commands.md

+2

Обратите внимание, что gulp 4 до сих пор официально не выпущен. – Narretz

+4

Gulp 4 - это современное воплощение парадокса Зенона. –

Смежные вопросы