north_leshiy
@north_leshiy
Руководитель направления разработки

Почему gulp dest может выдавать пустой файл?

При работе на удаленном тестовом сервере, появилась странная ошибка что переодически (зависимость так и не смог выявить), при выполнении задачи есть шанс что gulp.dest выплюнет пустой файл.

Появилось предположение что это связано что несколько разработчиков из под своих пользователей на сервере запустили свои gulp watch и активно с ними работают.

Ниже код всего GULP файла. В чем может быть проблема?

var gulp         = require('gulp'),
        compass      = require('gulp-compass'),
        plumber      = require('gulp-plumber'),
        autoprefixer = require('gulp-autoprefixer'),
        livereload   = require('gulp-livereload'),
        connect      = require('gulp-connect'),
        notify       = require('gulp-notify'),
        imagemin     = require('gulp-imagemin'),
        newer        = require('gulp-newer'),
        fileinclude  = require('gulp-file-include'),
        uglify       = require('gulp-uglify'),
        jshint       = require('gulp-jshint');
 
gulp.task('connect', function() {
        connect.server({
                root: 'build/',
                livereload: true
        });
});
 
gulp.task('css',function () {
        gulp.src('assets/sass/*.scss')
                .pipe(plumber())
                .pipe(compass({
                        css: 'build/css',
                        sass: 'assets/sass',
                        image: 'build/img/',
                        logging: true,
                        relative: true,
                        sourcemap: false,
                        time: true,
                        debug: false,
                        generated_images_path: 'build/img/'
                }))
                .pipe(autoprefixer({
                        browsers: ['last 12 versions','> 1%'],
                        cascade: false,
                        remove: false
                }))
                .pipe(gulp.dest('build/css'))
});
 
gulp.task('html', function () {
        gulp.src('assets/html/*.html')
                .pipe(fileinclude({
                        prefix: '@@',
                        basepath: '@file'
                }))
                .pipe(gulp.dest('build'))
});
 
 
gulp.task('js', function () {
        gulp.src('assets/js/project.js')
                .pipe(plumber())
                .pipe(gulp.dest('build/js/'));
});
 
 
gulp.task('img', function () {
        gulp.src('assets/img/**/*')
                .pipe(newer('build/img/'))
                .pipe(imagemin({
                        progressive: true
                }))
                .pipe(gulp.dest('build/img/'))
 
        gulp.src('assets/pic/**/*')
                .pipe(newer('build/pic/'))
                .pipe(imagemin({
                        progressive: true
                }))
                .pipe(gulp.dest('build/pic/'))
});
 
 
gulp.task('watch',function () {
        gulp.watch('assets/sass/**/*.scss',['css'])
        gulp.watch('assets/html/**/*.html',['html'])
        gulp.watch('assets/img/**/*',['img'])
        gulp.watch('assets/pic/**/*',['img'])
        gulp.watch('assets/js/*.js',['js'])
});
gulp.task('default', ['js', 'css', 'html', 'img', 'watch']);
  • Вопрос задан
  • 670 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Egideus
проблема может быть в задержке при сохранении файла, watch пытается получить доступ к файлу, раньше чем тот успел сохраниться на диске.
Для решения можно испрользовать либо setTimeOut:
watch('*.scss', function() {
setTimeout(function(){
gulp.start('sass');
}, 100);
});

либо спец параметр для watch:
watch('*.scss', {readDelay: 100}, function() {
gulp.start('sass');
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы