gulp通知在任务完成之前发生

时间:2016-04-08 09:28:13

标签: javascript node.js gulp gulp-git

无法理解gulp(我是新的)。

我想自动化产品构建,其中包括从gitlab repo克隆。

我不明白为什么我需要src('package.json'),这是一种什么样的伎俩?我也不知道为什么我会在任务开始时收到通知,而不是在最后![/ p>

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.

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

gulp-git-streamedgulp-git的包装器,允许您将git操作应用于流中的文件。这对于添加和提交文件等内容很有意义:

return gulp.src('**/*.js')
  .pipe(git.add())
  .pipe(git.commit('Commit all JS files'))
然而,对于clone操作来说,这是毫无意义的。 gulp-git-streamed实际上并没有将克隆的文件发送到流中,因为它需要现有的流开始,您必须人工创建一个具有您知道的虚拟文件的文件,如package.json。< / p>

在您的情况下,最好直接使用gulp-gitnode-notifier

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