首页 > 解决方案 > Gulp 管道创建文件并使用这些文件

问题描述

我正在玩 gulp,我偶然发现了这个我无法真正理解的问题。我有一些任务:

gulp.task('concat-js', (done) => {
  gulp.src('src/app/**/*.js')
    .pipe(concat('app-script.js'))
    .pipe(gulp.dest('src/app/dist/'));

  done();
});

gulp.task('minify-js', (done) => {
  gulp.src('src/app/dist/*.js')
    .pipe(minify({noSource: true, ignoreFiles: ['*-min.js']}))
    .pipe(gulp.dest('src/app/dist/'));

  done();
});

gulp.task('compress',
  gulp.series('concat-js', 'minify-js', function(done) {
    // default task code here
    done();
  })
);

gulp.task(
  'run',
  gulp.series('compress', () => {
  ...
  }
));

我的目标是在执行 run时,将源文件连接起来,然后将该文件的缩小版本连接起来。但是我在串行执行这些任务时遇到了某种问题。当我第一次执行run时,应用程序没有运行,只有app-script.js被创建。第二次运行它会创建 app-script-min.js 文件。

据我了解minify-js不会等待concat-js完成创建文件。

标签: javascriptnode.jsgulp

解决方案


我认为这可能是因为在完成 gulp 之前调用了 done()。尝试改变

gulp.task('concat-js', (done) => {
  gulp.src('src/app/**/*.js')
    .pipe(concat('app-script.js'))
    .pipe(gulp.dest('src/app/dist/'));

  done();
});

gulp.task('concat-js', (done) => {
  gulp.src('src/app/**/*.js')
    .pipe(concat('app-script.js'))
    .pipe(gulp.dest('src/app/dist/'))
    .on('finish', function() {
        done();
    });

});

我还发现了这个资源,你可能会感兴趣。http://www.ericcredeur.com/gulp/javascript/2015/07/15/cascading-gulp-tasks.html


推荐阅读