搜索
javascript - gulp任务的先后问题
伊谢尔伦
伊谢尔伦 2017-04-10 16:27:55
[JavaScript讨论组]

在执行gulp任务的时候经常会遇到上一个任务执行完毕再执行下一个任务
不知道应该如何处理
我用了一个插件写的代码 先后顺序不对
我希望是执行顺序是 a->a完成->b->b完成->c

var gulp         = require('gulp'),
        gulpSequence = require('gulp-sequence');


gulp.task('a',function(){
     setTimeout(function(){
         console.log('task a done...')
     },300)
});

gulp.task('b',function(){
     setTimeout(function(){
         console.log('task b done...')
     },200)
});

gulp.task('c',function(){
     setTimeout(function(){
         console.log('task c done...')
     },100)
});


gulp.task('default', gulpSequence('a', 'b', 'c'));

但是结果是这样的:

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
迷茫

那是你的用法不对,因为task里都是异步行为,你得通知它做完。

var gulp = require('gulp'),
    gulpSequence = require('gulp-sequence');


gulp.task('a',function(cb){
     setTimeout(function(){
         cb();
         console.log('task a done...')
     },300)
});

gulp.task('b',function(cb){
     setTimeout(function(){
         cb();
         console.log('task b done...')
     },200)
});

gulp.task('c',function(cb){
     setTimeout(function(){
         cb();
         console.log('task c done...')
     },100)
});


gulp.task('default', gulpSequence('a', 'b', 'c'));

参考资料 https://github.com/teambition/gulp-sequence
https://github.com/Platform-CUF/use-gulp

PHP中文网

因为gulp的执行是异步的啊,并非阻塞。

PHP中文网

注意看文档,

https://github.com/gulpjs/gulp/blob/master/docs/API.md

gulp.task(name[, deps], fn)

这里的 deps 是依赖,

你可以这样。

gulp.task(a, function(){
    xxxx
})

gulp.task(b,[a], function(){
   xxxx
})

这个时候 b的执行就是在 a之后,但是这种执行方式是有要求的:

Async task support

Tasks can be made asynchronous if its fn does one of the following:
Accept a callback

// run a command in a shell
var exec = require('child_process').exec;
gulp.task('jekyll', function(cb) {
  // build Jekyll
  exec('jekyll build', function(err) {
    if (err) return cb(err); // return error
    cb(); // finished task
  });
});
Return a stream

gulp.task('somename', function() {
  var stream = gulp.src('client/**/*.js')
    .pipe(minify())
    .pipe(gulp.dest('build'));
  return stream;
});


Return a promise

var Q = require('q');

gulp.task('somename', function() {
  var deferred = Q.defer();

  // do async stuff
  setTimeout(function() {
    deferred.resolve();
  }, 1);

  return deferred.promise;
});

看你使用 setTimeout来看, 第三种方式比较适合你

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号