Загрузка файлов css иногда не работает в gulp

#gulp #livereload

#gulp #livereload

Вопрос:

У меня есть небольшой список .scss того, что будет преобразовано в css с помощью gulp-sass. Процесс преобразования выполняется очень быстро, менее чем за 5 мс.

Но перезагрузка файлов css с помощью gulp-connect плагина занимает некоторое время, 3s а иногда даже вообще не работает, и мне приходится снова сохранять .scss файл, чтобы увидеть результат в браузере. Проверено с расширением / без Livereload расширения для Chrome.

Почему?

Моя задача Sass:

 gulp.task('sass', function() {
    gulp.src(['source/sass/*.scss'])
    .pipe(sass({
        outputStyle: 'expanded'
    }))
    .pipe(gulp.dest('source/assets/css'))
    .pipe(connect.reload());
});
  

Моя задача наблюдения:

 gulp.task('watch', function () {
  gulp.watch(['source/sass/**/*.scss'], ['sass']);
});
  

Моя задача подключения:

 gulp.task('connectDev', function() {
  connect.server({
    root: 'source',
    port: 8001,
    livereload: true
  });
});
  

И задача по умолчанию:

 gulp.task('default', ['sass', 'connectDev', 'watch']);
  

Ответ №1:

Я не знаю точно, что произошло, но путем добавления .on( 'error', gutil.log ) after reload() и sass() проблема решена.

 gulp.task('sass', function() {
    gulp.src(['source/sass/*.scss'])
    .pipe(sass({
        outputStyle: 'expanded'
    })).on( 'error', gutil.log )
    .pipe(gulp.dest('source/assets/css'))
    .pipe(connect.reload()).on( 'error', gutil.log );
});
  

Возможно, это каким-то образом вызывает перезагрузку.

Также разделение .pipe(connect.reload()) вызвало задержку и сбой. вот так:

 gulp.task('sass', function() {
    gulp.src(['source/sass/*.scss'])
    .pipe(sass({
        outputStyle: 'expanded'
    })).on( 'error', gutil.log )
    .pipe(gulp.dest('source/assets/css'))
    .pipe(connect.reload()).on( 'error', gutil.log );
});

gulp.src('source/assets/**/*.css')
.pipe(connect.reload()).on( 'error', gutil.log );
  

Ответ №2:

Вот простое и проверенное решение для загрузки файлов, основанное на connect сервере connect-livereload и gulp-livereload плагинах, которые работают очень быстро для меня:

 
var gulp = require('gulp');
var connect = require('connect');
var connectLivereload = require('connect-livereload');
var opn = require('opn');
var gulpLivereload = require('gulp-livereload');

var config = {
    rootDir: __dirname,
    servingPort: 8080,

    // the files you want to watch for changes for live reload
    filesToWatch: ['*.{html,css,js}', '!Gulpfile.js', '!karma.conf.js', '!protractor.conf.js']
}

// The default task - called when you run `gulp` from CLI
gulp.task('default', ['watch', 'serve']);

gulp.task('watch', ['connect'], function () {
  gulpLivereload.listen();
  gulp.watch(config.filesToWatch, function(file) {
    gulp.src(file.path)
      .pipe(gulpLivereload());
  });
});

gulp.task('serve', ['connect'], function () {
  return opn('http://localhost:'   config.servingPort);
});

gulp.task('connect', function(){
  return connect()
    .use(connectLivereload())
    .use(connect.static(config.rootDir))
    .listen(config.servingPort);
});