【问题标题】:How to run bash commands in gulp?如何在 gulp 中运行 bash 命令?
【发布时间】:2014-01-15 03:52:44
【问题描述】:

我想在gulp.watch函数的末尾添加一些bash命令来加快我的开发速度。所以,我想知道这是否可能。谢谢!

【问题讨论】:

    标签: bash gulp


    【解决方案1】:

    我会选择:

    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
            });
    
    
        });
    });
    

    这里没有什么真正的“gulp”——主要是使用子进程http://nodejs.org/api/child_process.html并将结果欺骗到fancy-log中

    【讨论】:

    • 在对子进程进行了一些研究之后,我终于通过使用child_process.exec 实现了我的目标。感谢您的节点资源!
    • 感谢您实际解决他的问题,而不是回复插件链接。
    • 虽然我能理解您可能不想使用插件,但我相信我的回答仍然解决了这个问题。
    • 我有同样的问题,你的回答比重新设计这个众所周知的轮子更能满足我的需要(不要减损 Mangled 的回答)。
    【解决方案2】:

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

    一个方便的 gulp 命令行界面

    【讨论】:

    • 虽然有其他方法(如 gulp-exec 和 gulp-spawn),但 gulp-shell 会立即打印命令的输出 - 这通常是需要的。
    • 现在还有gulp-run,界面更简洁直观,IMO。
    • gulp-shell 被列入黑名单,见github.com/gulpjs/plugins/blob/master/src/blackList.json。
    • 它被“列入黑名单”,因为与gulp-exec 有一些重叠——并不是说这两个插件都有什么问题。 github.com/sun-zheng-an/gulp-shell/issues/1
    • 不需要任何插件即可从 gulp 运行 bash 命令。直接使用节点的child_process即可。这就是这些插件被列入黑名单的原因。
    【解决方案3】:

    最简单的解决方案很简单:

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

    它不使用节点流和 gulp 管道,但它会完成工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2011-05-14
      • 2021-08-31
      相关资源
      最近更新 更多