2014-12-22 7 views
1

вот мой gruntfile:Грунт часы: LiveReload перезагружается 1 шаг позади ...

module.exports = function(grunt) { 

    // Project configuration. 
    grunt.initConfig({ 
     hologram: { 
      generate: { 
       options: { 
        config: 'config.yml' 
       } 
      } 
     }, 
     libsass: { 
      files: { 
       src: 'src/scss/style.scss', 
       dest: 'templates/static/css/style.css' 
      } 
     }, 
     connect: { 
      server: { 
       options: { 
        port: 8000, 
        hostname: 'localhost', 
        base: 'docs/', 
        livereload: 35729 
       } 
      } 
     }, 
     watch: { 
      scss: { 
       files: ['src/scss/**/*.scss', 'templates/static/css/*.css'], 
       tasks: ['libsass','hologram'], 
       options: { 
        livereload: true 
       } 
      } 
     } 
    }); 

    // Load plugins. 
    grunt.loadNpmTasks('grunt-libsass'); 
    grunt.loadNpmTasks('grunt-hologram'); 
    grunt.loadNpmTasks('grunt-contrib-connect'); 
    grunt.loadNpmTasks('grunt-contrib-watch'); 

    // Default task(s). 
    grunt.registerTask('default', ['connect','libsass','hologram','watch']); 

}; 

А вот мой файл пакета:

{ 
    "name": "...", 
    "version": "1.0.0", 
    "description": "...", 
    "dependencies": { 
    "grunt": "^0.4.5" 
    }, 
    "devDependencies": { 
    "connect-livereload": "^0.5.2", 
    "grunt": "^0.4.5", 
    "grunt-contrib-connect": "^0.9.0", 
    "grunt-contrib-watch": "^0.6.1", 
    "grunt-hologram": "0.0.4", 
    "grunt-libsass": "^0.2.0" 
    }, 
    "repository": { 
    "type": "git", 
    "url": "..." 
    }, 
    "author": "Yann Bettremieux", 
    "homepage": "..." 
} 

Все, кажется, работает нормально. Когда я перехожу к http://localhost:8000/, я вижу свой сайт, и когда я сохраняю свои просмотренные файлы, перезагружается страница и т. Д. Но фактически не перезагружает предыдущие изменения. Смысл, первый раз, когда я редактирую файл SCSS, чтобы сказать color: blue, я вижу в инспекторе, что загружаются файлы с CSS-файлами CSS, но на странице нет изменений. Если я изменю CSS на color: red, перезагрузите страницу, но покажу все в синем ... Если я изменю его на зеленый, он перезагрузится и покажет мне все в красном и т. Д. И т. Д.

Я попытался использовать хром-расширение для увеличения длины пера но это ничего не изменило. Я попробовал grunt-sass вместо libsass. Такое же поведение.

Не знаете, что еще можно попытаться решить эту проблему. Любой указатель в правильном направлении очень ценится!

ответ

1

Livereload Readme уже решает проблему. См live-reload-with-preprocessors:

Каждый раз смотрел файл редактируется с опцией LiveReload включена, файл будет отправлен на сервер живого перегрузочной. Некоторые отредактированные файлы, которые вы могут пожелать отправить на сервер прямой перезагрузки, например, при предварительной обработке (sass, less, coffeescript и т. Д.). Поскольку любой файл, не распознанный , перезагрузит всю страницу, а не только javascript css или .

Решение заключается в том, чтобы указывать цель поиска в пелену для целевых файлов.

Вы должны включить функцию загрузки только для файлов css.

watch: { 
    scss: { 
     files: ['src/scss/**/*.scss'], 
     tasks: ['libsass','hologram'] 
    }, 
    css: { 
     files: ['templates/static/css/*.css'], 
     options: { 
      livereload: true 
     } 
    } 
} 
+0

Спасибо ... К сожалению, иногда это работает, как ожидалось, а иногда это работает, как я ранее описал даже с вашим кодом. Я не могу достоверно воссоздать поведение последовательно.Когда я запускаю задачи с помощью 'grunt'it, никогда не работает в первый раз, когда я сохраняю SCSS-файл, но он работает после 3-6 сейвов и если/когда он начинает работать, тогда все хорошо, пока я не остановлю часы. – Yann

+0

Вы уверены, что сделали это именно так? Я использовал этот подход без проблем. Конфигурация может немного отличаться для вас, но сама идея заключается в прослушивании изменений в файлах результатов css. –

+0

Я в значительной степени копировал + вставлял вам ответ (только изменил второй ключ 'scss' на' css'). Еще несколько загадочных ... НО мне удалось добиться последовательного поведения с вашей настройкой: в первый раз, когда я делаю изменения и сохраняю, это не сработает. Но если я сначала сохраню первое изменение дважды подряд (сначала сохраним, не внося никаких изменений), он будет вести себя так, как должен, для всех последующих изменений. Так что все еще есть что-то не так с настройкой, но в то же время это полезно ... Спасибо! – Yann

0

Очень похоже на то, что случилось со мной, и хотя я еще не нашел решение, я думаю, что проблема может быть в настройках развертывания. Мои исходные файлы хранятся локально, и когда любые изменения обнаружены (например, ручное сохранение или перезапись препроцессором), они автоматически загружаются на сервер развертывания моей IDE.

Проблема заключается в том, что перезагрузка запускается до завершения загрузки загрузки и, таким образом, перезагружается файл css не является актуальным. Но в следующий раз перезагрузка произойдет, этот файл используется вместо фактического измененного, но еще не загруженного файла css.

Я предполагаю, что если бы существовала опция для задержки в работе пера или что-то в этом роде, это могло бы решить проблему.

Если это не ваш случай или вы уже решили свою проблему, я надеюсь, что это может сэкономить время отладки для всех, кто сталкивается с той же проблемой.

EDIT: Это предложение, как добавить задержку LiveReload редактирования livereload.js https://github.com/gruntjs/grunt-contrib-watch/issues/175#issuecomment-120000485