2014-01-15 209 views

回答

45

使用https://www.npmjs.org/package/gulp-shell

一個方便的命令行界面一飲而盡

+6

雖然還有其他方法(如gulp-exec和gulp-spawn),但gulp-shell立即打印命令的輸出 - 這是通常需要的。 – 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' }); 
}); 

它不使用節點流和咽管,但它會做的工作。