Gulp'干净'在第二轮运行中给出错误

时间:2015-09-10 20:10:06

标签: javascript gulp gulp-watch

对于我正在编写的Web应用程序,我有一个非常简单(或者我认为)的gulpfile,main函数将所有文件从src目录移动到build目录,处理某些文件一路上。它设置为在gulp启动时运行,然后在src目录中查看更改,并在发生更改时再次运行。它在第一次运行时运行完美,但是当它从watch函数运行时它会返回此错误:

Error: ENOENT, lstat '/Users/sawyer/Desktop/Web Scraper/online/build/css/styles.css'

这是我的gulpfile(注意它在没有chmod的情况下也会出现相同的错误):

var gulp = require('gulp');
var chmod = require('gulp-chmod');

gulp.task('default', ['buildProjectFiles'], function() {
    gulp.watch('src/**/*', ['buildProjectFiles']);
});

gulp.task('buildProjectFiles', ['clean'], function() {
    gulp.start('moveFiles');
    gulp.start('processSCSS');
    gulp.start('processJS');
});

gulp.task('clean', function() {
    var clean = require('gulp-clean');

    return gulp.src('build/**/*', {read: false})
        .pipe(clean());
});

gulp.task('moveFiles', function() {
    return gulp.src(['src/**/*.php', 'src/**/*.json', 'src/fonts/*', 'src/img/*'], {base: 'src'})
        .pipe(chmod(766))
        .pipe(gulp.dest('build'));
});

gulp.task('processSCSS', function() {
    var sass = require('gulp-sass');

    return gulp.src('src/scss/*.scss', {base: 'src/scss'})
        .pipe(sass().on('error', sass.logError))
        .pipe(chmod(766))
        .pipe(gulp.dest('build/css'));
});

gulp.task('processJS', function() {
    var uglify = require('gulp-uglify');

    return gulp.src('src/js/**/*.js', {base: 'src'})
        .pipe(uglify())
        .pipe(chmod(766))
        .pipe(gulp.dest('build'));
});

有什么想法吗?

编辑:即使使用clean({force: true})也无效

编辑2:从我的测试中,我发现它不是手表的问题,而是每次运行时都会出现问题,无论它何时运行。它可以通过禁用moveFilesprocessSCSS来正常工作。

1 个答案:

答案 0 :(得分:2)

也许尝试将buildProjectFiles更改为以下内容:

gulp.task('buildProjectFiles', ['clean'], function(callback) {
    gulp.start(['moveFiles', 'processSCSS', 'processJS'], callback);
});

否则我认为gulp不知道buildProjectFiles何时实际完成,并且可能有一些任务与干净重叠。