javascript - gulp 4.0 : run tasks in series

标签 javascript gulp gulp-4

我正在尝试连续运行一组任务,即在 Gulp 4.0 中一个接一个地运行,但是当我添加第三个任务时,我的 gulp 代码中断了。

    gulp.task('concat-js', (done) => {
      gulp.src([  
        'app1.js',
        'app2.js',
      ])
      .pipe(concat("app.js")) 
      .pipe(gulp.dest('build'))
      done();
    });

    gulp.task('concat-css', (done) => {
      gulp.src([
        '.styles1.css',
        '.style2.css'
      ])
      .pipe(concat("app.css"))
      .pipe(gulp.dest('build'))
      done();  
    });

    gulp.task('minify-js', (done) => {
      gulp.src('./build/app.js')
      .pipe(uglify())
      .pipe(gulp.dest('./build/'))
      done();
    })

    //this works & creates /build with the app.js & app.css files
    gulp.task('build-production-static-resource', gulp.series('concat-js', 'concat-css',, (done) => {
      done();
    }));

如果我删除构建文件夹以重新开始并尝试添加另一个任务(minfy-js),我的第三个任务将失败并且构建文件夹也不会创建。

    //File not found with singular glob: /Users/user/myapp/build/app.js
    gulp.task('build-production-static-resource', gulp.series('concat-js', 'concat-css', 'minify-js', (done) => {
      done();
    }));

最佳答案

您发出异步完成任务信号的方式是错误的。阅读 this answer概述在 gulp 中发出异步完成信号的不同方式。

基本上,您通过 gulp.src() 创建的所有流都是异步的。这意味着您创建了流并且您的代码立即返回。然而,流的实际处理仅在您退出任务函数之后才开始。为了让 gulp 知道您正在使用流并且它必须等待流完成处理,您需要从任务中返回流。

你正在做完全不同的事情。您正在调用回调函数 done,这是向 gulp 发出异步任务完成信号的另一种方式。然而,在这种情况下,这是完全错误的方式,因为当您调用回调函数done时,您创建的流甚至还没有开始处理。

这意味着 gulp 认为您的 concat-js 任务已经完成,尽管您任务中的代码甚至还没有真正开始运行。因此,当 minify-js 任务运行时,您的 ./build/app.js 文件尚未创建。繁荣。错误。

要解决此问题,请始终从任务中返回流:

gulp.task('concat-js', () => {
  return gulp.src([  
      'app1.js',
      'app2.js',
    ])
    .pipe(concat("app.js")) 
    .pipe(gulp.dest('build'))
});

gulp.task('concat-css', () => {
  return gulp.src([
      '.styles1.css',
      '.style2.css'
    ])
    .pipe(concat("app.css"))
    .pipe(gulp.dest('build'))
});

gulp.task('minify-js', () => {
  return gulp.src('./build/app.js')
    .pipe(uglify())
    .pipe(gulp.dest('./build/'))
})

gulp.task('build-production-static-resource', gulp.series(
  'concat-js', 'concat-css', 'minify-js'
));

关于javascript - gulp 4.0 : run tasks in series,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38620973/

相关文章:

javascript - JS 窗口就绪和脚本计时

javascript - AJAX 最佳实践是什么?

javascript - 显示星级

dependencies - 更新 Gulp 插件

gulp - 更改.less文件时,Gulp 4 browsersync不刷新

javascript - 如何覆盖已经添加的重要元素

javascript - 在 gulp 流中显示进度条

javascript - 必须多次运行 gulp 才能获得样式更改

node.js - gulp.series 不序列化任务