Grunt.js: запуск livereload сразу после изменения файлов до завершения задачи.

Я использую Grunt для компиляции моего CSS с компасом и запускаю перезагрузку браузера. Это мои часовые задачи:

watch: {
    styles: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.scss', '!**/*.{dev,min}.scss'],
        tasks: [
            'concat:styles',
            'compass:styles',
            'imagemin:styles',
            'cssmin:styles',
            'clean:styles',
        ],
    },
    scripts: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.js', '!**/*.{dev,min}.js'],
        tasks: [
            'concat:scripts',
            'uglify:scripts',
        ],
    },
    livereload: {
        options: {
            livereload: true,
            spawn: false,
        },
        files: [assetsDir + '/**/*.{dev,min}.{css,js}'],
    },
},  

На данный момент задача livereload не запускается до тех пор, пока задача стилей не будет полностью завершена, однако imagemin может добавить значительную задержку, и все, что меня действительно волнует, — это CSS, который готов, как только компас завершит работу.

Как я могу заставить livereload запускаться сразу после завершения работы компаса, но разрешить выполнение других задач? Я попробовал приведенную ниже конфигурацию, которая запускает imagemin при изменении CSS, однако, похоже, она не работает. С этим imagemin почему-то вообще не срабатывает. Разве у вас не может быть несколько задач для просмотра одних и тех же файлов?

watch: {
    styles: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.scss', '!**/*.{dev,min}.scss'],
        tasks: [
            'concat:styles',
            'compass:styles',
            'cssmin:styles',
            'clean:styles',
        ],
    },
    scripts: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.js', '!**/*.{dev,min}.js'],
        tasks: [
            'concat:scripts',
            'uglify:scripts',
        ],
    },
    images: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.{dev,min}.css'],
        tasks: [
            'imagemin:styles',
        ],
    },
    livereload: {
        options: {
            livereload: true,
            spawn: false,
        },
        files: [assetsDir + '/**/*.{dev,min}.{css,js}'],
    },
},

Спасибо.


person Jack Sleight    schedule 12.08.2013    source источник


Ответы (1)


Мне удалось заставить это работать, используя grunt-concurrent для параллельного запуска трех задач наблюдения. :

concurrent: {
    options: {
        logConcurrentOutput: true,
    },
    watch: [
        'watch:scripts',
        'watch:styles',
        'watch:livereload',
    ],
},
person Jack Sleight    schedule 12.08.2013
comment
Как вам удалось это сработать? Я получил Fatal error: Port 35729 is already in use by another process., потому что несколько наблюдателей работают параллельно (если я изменю некоторые стили и некоторые скрипты и нажму «Сохранить»). - person artuska; 25.09.2016