2015-04-08 22 views
28

Chciałbym uruchomić polecenie powłoki z gulp, przy użyciu gulp-shell. Widzę następujący idiom używany plik gulp.Uruchamianie polecenia powłoki z gulp

Czy to jest idiomatyczny sposób na wykonanie polecenia z zadania z trudem?

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

Odpowiedz

76

gulp-shell został umieszczony na czarnej liście. Zamiast tego należy użyć wartości gulp-exec, która ma również lepszą dokumentację.

Twoim przypadku to rzeczywiście stwierdza:

Uwaga: Jeśli chcesz tylko uruchomić polecenie, wystarczy uruchomić komendę, nie używaj tej wtyczki:

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

Jak wykonać dwa polecenia powłoki? –

+20

'gulp-shell został blacklisted': Co masz na myśli przez to? – Laoujin

+22

Gulp zawiera czarną listę pakietów, które nie są napisane w "sposób Gulp". Sprawdź listę tutaj: https://github.com/gulpjs/plugins/blob/master/src/blackList.json – ddprrt

28

nowy sposób na to, że utrzymuje wyjścia konsoli takie same (na przykład za pomocą kolorów):

patrz: 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

Ale bądź ostrożny, jeśli jesteś w systemie Windows, ponieważ spawn() nie działa niezawodnie, zobacz [ten problem węzła] (https:// gith ub.com/nodejs/node-v0.x-archive/issues/2318) –

+0

To jest najlepsza odpowiedź imo +1 – chukkwagon

7

Z gulp 4 zadań może bezpośrednio zwrócić procesu potomnego do sygnału zakończenia zadania:

'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

Pamiętaj, że łyk 4 nadal nie został oficjalnie wydany. – Narretz

+4

Gulp 4 to współczesna inkarnacja paradoksu Zenona. –

Powiązane problemy