我对gulp.watch
有问题。
TLDR:如何告诉gulp.watch
等到必要的任务无法完成后再运行新周期?
原因:我有三个任务:clean
、build
和watch
。任务clean
删除目录,任务build
在同一目录中生成文件(clean
是build
的依赖项)。任务 watch
在目录上运行gulp.watch
,然后运行build
(运行clean
)。
但有时watch
任务会在上一个build
完成之前运行新的build
并发生错误:build
继续写入目录,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
});
});