Javascript 任务完成前会发出吞咽通知
难以理解吞咽(我是新来的) 我想自动化一个涉及从gitlab repo克隆的产品构建 我不明白为什么我需要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
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>任务完成并开始执行下一个任务。