Grunt Live-Reload через часы

Я пытаюсь настроить grunt для загрузки файлов js и less/css при изменении. Хотя grunt правильно «наблюдает» и выполняет назначенные задачи, он не перезагружает файлы. Ниже моя конфигурация, кто-нибудь видит, что не так?

module.exports = function(grunt) {
grunt.initConfig({
    pkg: grunt.file.readJSON("package.json"),
    jshint: {
        files: ["Gruntfile.js", "src/javascripts/**/*.js"],
        options: {
            globals: {
                jQuery: true,
                console: true,
                module: true
            }
        }
    },
    concat: {
        options: {
            stripBanners: true,
            banner: "/*! <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today('yyyy-mm-dd') %> */\n",
            separator: "\n"
        },
        js: {
            src: ["src/javascripts/main.js", "src/javascripts/**/*.js"],
            dest: "../app/assets/javascripts/application.js"
        },
        less: {
            src: ["src/stylesheets/**/*.less"],
            dest: "../app/assets/stylesheets/application.less"
        }
    },
    watch: {
        js: {
            files: ["<%= jshint.files %>"],
            tasks: ["jshint", "concat:js"],
            options: {
                livereload: true
            }
        },
        less: {
            files: ["<%= concat.less.src %>"],
            tasks: ["concat:less"],
            options: {
                livereload: true
            }
        }
    }
});

grunt.loadNpmTasks("grunt-contrib");

grunt.registerTask("default", ["jshint", "concat"]);
};

Примечание. Я включил следующий тег script в тег заголовка html.

<script src="http://localhost:35729/livereload.js"></script>

person Ari    schedule 14.05.2013    source источник


Ответы (2)


Ваша конфигурация пытается запустить 2 сервера перезагрузки в реальном времени на одном и том же порту. Если вы хотите, чтобы 1 сервер перезагрузки в реальном времени запускался для всех ваших целей наблюдения, просто добавьте 1 параметр перезагрузки в режиме реального времени на уровне задачи:

watch: {
  options: {
    livereload: true
  },
  js: {
    files: ["<%= jshint.files %>"],
    tasks: ["jshint", "concat:js"],
  },
  less: {
    files: ["<%= concat.less.src %>"],
    tasks: ["concat:less"],
  }
}
person Kyle Robinson Young    schedule 14.05.2013
comment
Я перенастроил часы, как вы предложили выше, но, к сожалению, live-reload все равно не выполняется. - person Ari; 15.05.2013
comment
Вы можете сделать grunt watch --verbose, и он сообщит вам, когда он перезагрузится в консоли. Хотя я заметил, что вы используете grunt.loadNpmTasks('grunt-contrib')..., который использует более старую версию задачи наблюдения, в которой нет перезагрузки в реальном времени. Я рекомендую не использовать grunt-contrib и загружать каждый модуль по отдельности. - person Kyle Robinson Young; 15.05.2013
comment
Что означает загрузка модулей по отдельности? В моем пакете есть grunt-contrib-watch: ~0.6.0, я пытался загрузить с помощью load-grunt-tasks, а также вручную с помощью loadNpmTasks, но когда файл изменяется, часы говорят мне, что задача «перезагрузка» не найдена. - person Rayjax; 18.03.2014
comment
@Rayjax Похоже, ваш Gruntfile пытается использовать задачу reload. grunt-contrib-watch не предоставляет задачу reload. Он предоставляет только watch задачу. - person Kyle Robinson Young; 18.03.2014
comment
Правда плагин grunt-reload пришлось удалить, но вызов на перезагрузку остался в задаче watch. Исправил, удалив этот звонок, работает хорошо - person Rayjax; 19.03.2014

Мне не хватало тега script, и после добавления этого

он начал работать для меня. :)!

Спасибо,

person Shobhit    schedule 29.02.2016