对于正在编写的Web应用程序,我有一个非常简单的gulpfile,其主要功能是将所有文件从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可以正常工作。

最佳答案

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

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


否则,我认为gulp不知道buildProjectFiles何时真正完成,并且可能有些任务与clean重叠。

09-11 18:44
查看更多