如何告诉 gulp.watch 等到必要的任务在 运行 新循环之前完成?

How to tell gulp.watch to wait until necessary tasks will not be finished before running new cycle?

我对 gulp.watch 有疑问。

TLDR: 如何告诉 gulp.watch 等到必要的任务在 运行 新周期之前没有完成?

原因: 我有三个任务:cleanbuildwatch。 任务 clean 删除目录,任务 build 在同一目录中生成文件(cleanbuild 的依赖项)。 目录上的任务 watch 运行s gulp.watch 然后它 运行s build (即 运行s clean)。

但有时 watch 任务 运行s new build before previous build is finished and an error occurs: build continues write to directory and clean 尝试删除目录(当然,ENOTEMPTY 会发生错误)。

这个问题发生在我 运行 gulp watch 命令时。

我的Gulpfile.js:

var gulp = require('gulp');
var ts = require('gulp-typescript');
var tslint = require('gulp-tslint');
var rename = require('gulp-rename');
var del = require('del');

var tsProject = ts.createProject('tsconfig.json');
var tsSources = ['app/**/*.ts', 'app/**/*.tsx'];

gulp.task('clean', function() {
  return del(['built']);
});

gulp.task('build', ['clean'], function() {
  return gulp.src(tsSources)
    .pipe(ts(tsProject)).js
    .pipe(rename({extname: '.js'}))
    .pipe(gulp.dest('built'));
});

gulp.task('tslint', ['clean'], function() {
  return gulp.src(tsSources)
    .pipe(tslint())
    .pipe(tslint.report('msbuild', {
      emitError: false,
      summarizeFailureOutput: false
    }));
});

gulp.task('watch', ['build', 'tslint'], function() {
  return gulp.watch(tsProject.config.filesGlob, ['build', 'tslint']);
});

gulp.task('default', ['build', 'tslint']);

要清理 gulp,请使用以下代码:-

gulp.task('clean', function() {
    del.sync([ 
       path.join(__dirname, builtPath, '**/*.js'),
    ], {
       force: true
    });
});