搜尋

首頁  >  問答  >  主體

node.js - gulp.task非同步問題

如何理解這句話:Are your tasks running before the dependencies are complete? Make sure your dependency tasks are correctly using the async run hints: take in a callback or return a promise#or event stream.

gulpjs中文網的翻譯:你的任務是否在這些前置依賴的任務完成之前運行了?請一定要確保你所依賴的任務清單中的任務都使用了正確的非同步執行方式:使用一個 callback,或傳回一個 promise 或 stream。

我有些摸不著頭腦。如果沒有使用callback或回傳promise/stream,那這個任務就不是非同步任務了?

還有gulp.task('mytask',['beforemytask']),表示beforemytask執行完了再去執行mytask,有點同步的味道,但是beforemytask需要使用正確的非同步方式?

懵B,求大神解惑

#

某草草某草草2752 天前845

全部回覆(2)我來回復

  • ringa_lee

    ringa_lee2017-05-16 13:23:33

    如果沒有使用callback或回傳promise/stream,那這個任務就不是非同步任務了?

    是的。 gulp 任務序列執行依賴 Orchestrator,會對函數有無參數(callback)和回傳值(promise/stream)做判斷,從而決定是不是非同步。

    但是beforemytask需要使用正確的非同步方式?

    需要偵測 beforemytask 結束,確保 mytask 在後面執行就用上面的方式,否則任何方式都可以。

    回覆
    0
  • 高洛峰

    高洛峰2017-05-16 13:23:33

    你不知道這個任務什麼時候跑完,後面加一個回調處理,單就這一個任務而言,所以這裡的處理是異步的,
    同步確實像你所說的一樣,一個任務必須等另外一個任務執行完才能處理,有時候任務之間有依賴關係,

    必須按照依賴關係處理,這裡用同步去理解,我覺得沒有問題,這是我的一點理解,僅供參考

    下面舉個例子

    var gulp = require('gulp'); 
    var minifycss = require('gulp-minify-css'); //压缩css
    var uglify = require('gulp-uglify'); //压缩js
    var del = require('del'); // 删除目录
    
    gulp.task('clean',function() {
        return del(['dist/**']);
    });
    //压缩 css 
    gulp.task('minify-css',['clean'], function() {
        return  gulp.src('./public/**/*.css')
                .pipe(minifycss())
                .pipe(gulp.dest('./dist'));
    });
    
    //压缩 js 
    gulp.task('minify-js',['clean'], function() {
        return gulp.src('./public/**/*.js')
                .pipe(uglify())
                .pipe(gulp.dest('./dist'));
    });
    // 每一次跑任务 需要删除 dist 目录, 然后开始跑  minify-css 和 minify-js 
    //执行任务 这里 minify-css 和 minify-js 就依赖前面 clean 
    // 也就是说必须等  clean 这个任务跑完,minify-css 和 minify-js 才能执行
    // 
    // default 是默认执行的任务
    gulp.task('default',[
        'clean','minify-css','minify-js'
    ]);

    回覆
    0
  • 取消回覆