咕嘟咕嘟唔到的是callback – 它只是在任务结束时挂起

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

我如何获得它调用callback和退出/返回?

只是跑gulp hooks:pull

如果节点挂起而不是退出,那么推测一个任务仍在运行。

你可以使用Gulp stop钩子来杀死它,或者如果你不在意(如果你没有在任务中启动任何asynchronous清除function)就退出整个事情。

这应该做到这一点:

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

我发现我的问题(PEBKAC)

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

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

不知道为什么我补充说,但删除它修复。

适用于我(?)与此设置:

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

..除了主机和文件几乎相同。