什么是gulp任务异步运行提示?

时间:2015-02-15 13:06:12

标签: javascript node.js gulp

我有两项任务。

萨斯:

gulp.task('sass', function() {
    gulp.src('src/sass/**.{scss, sass}')
        .pipe(sourcemaps.init())
            .pipe(sass({outputStyle: 'compressed'}))
            .on('error', handleErrors)
            .pipe(autoprefixer())
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('dist/css'))
        .pipe(browserSync.reload({stream: true}))
});

CSS优化任务:

gulp.task('cssopt', ['sass'], function() {
    gulp.src('dist/css/style.css')
        .pipe(uncss({html: ['http://example.dev//']}))
        .pipe(cmq({log: true}))
        .pipe(shrink())
        .pipe(rename({suffix: '.opt'}))
        .pipe(gulp.dest('dist/css'))
});

cssopt任务依赖于sass任务,因为它使用style.css生成的sass文件。但是它不起作用,它找不到style.css文件,因为它不在那里。如果我先单独运行sass,那么cssopt会导致style.css在那里。

从文档(强调我的):

  

要执行并完成 任务的一系列任务将运行。

文档也说:

  

注意:在依赖项完成之前,您的任务是否正在运行?确保您的依赖项任务正确使用异步运行提示:接受回调或返回承诺或事件流。

我不太明白:“async run提示”...... wat ...

我尝试将clean任务作为deps运行,但是效果不错。


我可以把它们粉碎成一个任务,但是cssopt需要很长时间(当你给它一个URL时uncss很慢),我只需要style.opt.css个文件无论如何都在生产。

我正在使用gulp-sass的最新版本(1.3.3)。

1 个答案:

答案 0 :(得分:4)

  

“async run提示”...... wat ...

您需要提示您的任务 async 的gulp系统。您可以通过为任务函数提供回调参数,或通过return事件流或承诺来实现。这就是你的任务所缺乏的,他们返回undefined目前所以gulp期望他们立即完成。尝试

gulp.task('sass', function() {
    return gulp.src('src/sass/**.{scss, sass}').…