2014-01-15 3 views

ответ

45

Использования https://www.npmjs.org/package/gulp-shell.

Удобный интерфейс командной строки для глотка

+6

Хотя существуют альтернативные способы (например, gulp-exec и gulp-spawn), оболочка gulp выводит результат из команды немедленно - что часто требуется. – jmu

+4

Существует также ['gulp-run'] (https://www.npmjs.com/package/gulp-run), который имеет более чистый и интуитивно понятный интерфейс, IMO. –

+14

gulp-shell занесен в черный список, см. Https://github.com/gulpjs/plugins/blob/master/src/blackList.json. –

74

Я бы с:

var spawn = require('child_process').spawn; 
var fancyLog = require('fancy-log'); 
var beeper = require('beeper'); 

gulp.task('default', function(){ 

    gulp.watch('*.js', function(e) { 
     // Do run some gulp tasks here 
     // ... 

     // Finally execute your script below - here "ls -lA" 
     var child = spawn("ls", ["-lA"], {cwd: process.cwd()}), 
      stdout = '', 
      stderr = ''; 

     child.stdout.setEncoding('utf8'); 

     child.stdout.on('data', function (data) { 
      stdout += data; 
      fancyLog(data); 
     }); 

     child.stderr.setEncoding('utf8'); 
     child.stderr.on('data', function (data) { 
      stderr += data; 
      fancyLog.error(data)); 
      beeper(); 
     }); 

     child.on('close', function(code) { 
      fancyLog("Done with exit code", code); 
      fancyLog("You access complete stdout and stderr from here"); // stdout, stderr 
     }); 


    }); 
}); 

Ничего действительно «Глоток» здесь - в основном с использованием дочерних процессов http://nodejs.org/api/child_process.html и подменой результата в фантазийных войти

+3

После выполнения некоторых исследований по дочерним процессам, я достиг своей цели, используя, наконец, 'child_process.exec'. Спасибо за ваш ресурс узла! – houhr

+26

Благодарим вас за то, что вы обратились к его вопросу вместо того, чтобы отвечать ссылкой на плагин. –

+7

Хотя я могу понять, как вы, возможно, не захотите использовать плагин, я считаю, что мой ответ все еще касался вопроса. – Erik

0

Самое простое решение, как легко, как:

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

gulp.task('launch-ls',function(done) { 
    child.spawn('ls', [ '-la'], { stdio: 'inherit' }); 
}); 

Он не использует узел потоки и глотком трубы, но он будет делать работу ,

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