2015-04-08 20 views
28

Vorrei eseguire un comando shell da gulp, utilizzando gulp-shell. Vedo il seguente idioma essere usato il gulpfile.Esecuzione di un comando shell da gulp

È questo il modo idiomatico di eseguire un comando da un'attività di gulp?

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

risposta

76

gulp-shell è stato inserito nella lista nera. Dovresti invece usare gulp-exec, che ha anche una documentazione migliore.

Per il vostro caso è in realtà afferma:

Nota: Se si desidera solo per eseguire un comando, basta eseguire il comando, non utilizzare questo plugin:

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

Come eseguire due comandi della shell? –

+20

'gulp-shell è stato inserito nella blacklist': cosa intendi con questo? – Laoujin

+22

Gulp presenta una lista nera di pacchetti che non sono scritti in "modo Gulp". Controlla l'elenco qui: https://github.com/gulpjs/plugins/blob/master/src/blackList.json – ddprrt

28

Il nuovo modo di fare questo che mantiene l'output della console lo stesso (ad esempio, con i colori):

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

Ma fai attenzione se sei su Windows, dato che spawn() non funziona in modo affidabile, vedi [questo problema nodo] (https:// Gith ub.com/nodejs/node-v0.x-archive/issues/2318) –

+0

Questa è la migliore risposta imo +1 – chukkwagon

7

Con gulp 4 le attività può tornare direttamente un processo figlio per segnalare il completamento del compito:

'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

Nota che gulp 4 non è ancora stato rilasciato ufficialmente. – Narretz

+4

Gulp 4 è l'incarnazione moderna del paradosso di Zenone. –

Problemi correlati