Grunt (Less+Autoprefixer+Watch), как настроить, чтобы watch обрабатывал не всю папку, а только измененный файл в ней?

Итак, имеет настроенный для grunt таск с обработкой всех less файлов в одной папке в css с прогонкой через автопрефиксер, на изменение файлов в папке повешен watch.

Как настроить все это дело так, чтобы watch запускался только на измененный файл, при этом имена файлов не надо было отдельно указывать в предыдущих задачах?

На данный момент конфиг такой:
module.exports = function(grunt) {

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        less: {
            options: {
                paths: ['Less/']
            },
            files: {
                expand: true,
                cwd:    "Less/",
                dest:   "Modules/",
                src:    "*.less",
                ext:    ".css"
            }
        },

        autoprefixer:{
            options: {
                browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1'],
                cascade: false
            },
            multiple_files: {
                expand: true,
                flatten: true,
                src: 'Modules/*.css',
                dest: 'Modules/'
            }
        },

        watch: {
            scripts: {
                files: ['Less/*.less'],
                tasks: ['less', 'autoprefixer'],
                options: {
                    spawn: false
                }
            }
        }

    });

    grunt.loadNpmTasks('grunt-autoprefixer');
    grunt.loadNpmTasks('grunt-contrib-less');
    grunt.loadNpmTasks('grunt-contrib-watch');

    grunt.registerTask('default', ['less', 'autoprefixer', 'watch']);

};
  • Вопрос задан
  • 4088 просмотров
Решения вопроса 1
@MitoZ Автор вопроса
front-end developer
Спасибо за ссылочку на пример использования ивента, собственно поковырялсо и сделал пока так, немного топорно - но рабочий вариант:
module.exports = function(grunt) {

    var lessFolderPath = 'Less';

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        less: {
            options: {
                paths: ['Less/']
            },
            files: {
                expand: true,
                cwd:    lessFolderPath + '/',
                dest:   "Modules/",
                src:    "*.less",
                ext:    ".css"
            }
        },

        autoprefixer:{
            options: {
                browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1'],
                cascade: false
            },
            multiple_files: {
                expand: true,
                flatten: true,
                cwd: 'Modules/',
                src: '*.css',
                dest: 'Modules/'
            }
        },

        watch: {
            less: {
                files: ['Less/*.less'],
                tasks: ['less', 'apr'],
                options: {
                    spawn: false
                }
            }
        }

    });

    grunt.loadNpmTasks('grunt-autoprefixer');
    grunt.loadNpmTasks('grunt-contrib-less');
    grunt.loadNpmTasks('grunt-contrib-watch');

    grunt.registerTask('default', ['watch:less', 'watch:css']);
    grunt.registerTask('apr', ['autoprefixer']);

    grunt.event.on('watch', function(action, filepath, target) {
        var filePathName = filepath.replace(lessFolderPath + '\\','');
        var fileName = filePathName.replace('.less','');

        grunt.log.writeln(target + ': ' + filePathName + ' has ' + action);

        grunt.config('autoprefixer.multiple_files.src', [fileName + '.css']);
        grunt.config('less.files.src', [filePathName]);
    });
};
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
maxaon
@maxaon
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы