0

我正在尝试连续运行一组任务,在 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();
    }));
4

1 回答 1

4

您发出任务异步完成信号的方式是错误的。阅读此答案,了解在 gulp 中发出异步完成信号的不同方式的概述。

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

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

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

要解决此问题,请始终return使用您的任务中的流:

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'
));
于 2016-07-27T19:33:13.993 回答