Javascript 任务完成前会发出吞咽通知

Javascript 任务完成前会发出吞咽通知,javascript,node.js,gulp,gulp-git,Javascript,Node.js,Gulp,Gulp Git,难以理解吞咽(我是新来的) 我想自动化一个涉及从gitlab repo克隆的产品构建 我不明白为什么我需要src('package.json'),这是什么把戏吗?我也不明白为什么我在任务开始时得到通知,而不是在任务结束时 var gulp = require('gulp'); var git = require('gulp-git-streamed'); var notify = require('gulp-notify'); gulp.task('clone', function

难以理解吞咽(我是新来的)

我想自动化一个涉及从gitlab repo克隆的产品构建

我不明白为什么我需要
src('package.json')
,这是什么把戏吗?我也不明白为什么我在任务开始时得到通知,而不是在任务结束时

var gulp   = require('gulp');
var git    = require('gulp-git-streamed');
var notify = require('gulp-notify');


gulp.task('clone', function() {
  return gulp
    .src('package.json') // wth is this?
    .pipe(git.clone('https://gitlab.somedomain.com/mockups/theme.git', {args: './src/gitlab/mockups'}))
    .pipe(notify('psd repo cloned!')); // why does this run before cloning is finished?
});
发生的情况是:

[13:16:34] gulp-notify: [Gulp notification] psd repo cloned!
[13:20:23]  Cloning into './src/gitlab/mockups'...
Checking out files: 100% (18/18), done.

有什么想法吗?

gulp git streamed
是一个包装器,它允许您对流中的文件应用git操作。这对于添加和提交文件这样的事情很有意义:

return gulp.src('**/*.js')
  .pipe(git.add())
  .pipe(git.commit('Commit all JS files'))
然而,这对于
克隆操作来说是毫无意义的
gulp git streamed
实际上不会将克隆的文件发送到流中,因为它需要一个现有的流,所以您必须人工创建一个虚拟文件,您知道它存在于
package.json

在您的情况下,最好直接使用
gulpgit

var gulp   = require('gulp');
var git    = require('gulp-git');
var notifier = require('node-notifier');

gulp.task('clone', function(done) {
  git.clone('https://gitlab.somedomain.com/mockups/theme.git',
    {args: './src/gitlab/mockups'}, function (err) {
      if (err) {
        notifier.notify(err.message);      
      } else {
        notifier.notify('psd repo cloned!');
      }
      done();
  });
});

gulp.task('dependsOnClone', ['clone'], function(done) {
  console.log('starts executing after clone task has finished');
});

是的,我试过了,这种方法的问题是我不能再链接克隆任务了。这意味着依赖克隆的任务在克隆之前运行。。。使用包装器至少可以避免这种情况。您可能忘记在实现中使用
done()
回调。试试我的。依赖于
克隆
任务的任务只有在
克隆
任务完成后才会启动。是的,我没有完成()!你能简单地告诉我你在这里做了什么吗?
git.clone()
是异步的。这意味着它会立即返回,但克隆存储库的实际工作尚未完成。必须有某种东西告诉gulp克隆操作已经完成。否则,gulp将假定克隆任务已经完成,并开始运行下一个任务。“某物”是
done()
回调。只有调用它之后,GULP才会考虑<代码>克隆< /COD>任务完成并开始执行下一个任务。