gulp没有调用回调 - 它只是在任务结束时挂起

时间:2014-11-03 05:57:42

标签: node.js gulp

callback正在解雇,但任务只挂在Finished 'hooks:pull' after 2.04 s

gulp.task('hooks:pull', function(callback){
  var files = [
    { remote: '~/deploy/test.example.com/hooks/post-receive', local: './bin/post-receive.test' },
    { remote: '~/deploy/staging.example.com/hooks/post-receive', local: './bin/post-receive.staging' },
    { remote: '~/deploy/example.com/hooks/post-receive', local: './bin/post-receive.production' }
  ];

  async.each(files, function(file, cb) {
    var opts = {
      host: 'example.com'
    };

    opts.file = file.remote;
    opts.path = file.local;

    scp.get(opts, function(err) {
      if (err) {
        console.error(err);
        return cb(err);
      }

      console.log('%s hook has been pulled!', file.local);
      cb();
    });
  }, function(err){
    if ( err ) {
      console.error(err);
      return callback(err);
    }

    callback();
  });
});

如何让它调用回调并退出/返回?

刚刚运行gulp hooks:pull

3 个答案:

答案 0 :(得分:4)

如果节点挂起而不是退出,则可能是任务仍在运行。

你可以使用Gulp stop钩子来杀死它,或者只是为了退出整个事情,如果你不关心(如果你没有在你的任务中启动任何异步清理功能)。

这应该这样做:

process = require("process");
gulp.on('stop', function() { process.exit(0); }

答案 1 :(得分:2)

我发现了我的问题(PEBKAC)

我在gulpfile.js的顶部有这条线,导致它挂起。

var app = require('./server/index');

不确定我为什么添加它,但删除它修复它。

答案 2 :(得分:0)

使用此设置为我(?)工作:

var gulp = require('gulp');
var async = require('async');
var scp = require('scp');

gulp.task('default', function(callback) {
    var files = [
        { remote: '.gitconfig', local: './foo' },
        { remote: '.gitconfig', local: './bar' },
        { remote: '.gitconfig', local: './baz' }
    ];
    async.each(files, function(file, cb) {
        scp.get({ host: 'localhost', file: file.remote, path: file.local }, function(err) {
            if (err) {
                console.error(err);
                return cb(err);
            }
            console.log('%s has been pulled!', file.local);
            cb();
        });
    }, function(err) {
        if (err) {
            console.error(err);
            return callback(err);
        }
        callback();
    });
});

..除了主持人和实际上,它几乎是相同的。文件。