Я пытаюсь заставить grunt-contrib-watch просматривать папку с моими изображениями и запускать grunt-imageoptim для любых добавленных/измененных файлов jpg, gif или png.
Мой приведенный ниже код отлично работает для запуска imageoptim на новых изображениях, если я не создаю новые папки. Очевидно, это было исправлено в последних версиях, но я новичок в Grunt, так что это может быть что-то основное, что мне не хватает. Я получил его, чтобы увидеть изменения / новые папки в часах с помощью менее конкретного подстановочного знака, но тогда я не могу остановить запуск imageoptim на всех изображениях во всех папках.
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
imageoptim: {
options: {
jpegMini: false,
imageAlpha: true,
quitAfter: true
},
},
watch: {
files: ['images/**/*.jpg', 'images/**/*.png', 'images/**/*.gif'],
tasks: ['imageoptim'],
options: {
spawn: false,
},
},
});
// imageoptim
grunt.loadNpmTasks('grunt-imageoptim');
// grunt watch
grunt.loadNpmTasks('grunt-contrib-watch');
// Default task(s).
grunt.registerTask('default', ['imageoptim']);
var changedFiles = Object.create(null);
var onChange = grunt.util._.debounce(function() {
grunt.config('imageoptim.all.src', Object.keys(changedFiles));
changedFiles = Object.create(null);
}, 200);
grunt.event.on('watch', function(action, filepath) {
changedFiles[filepath] = action;
onChange();
});
};
(нижняя функция состоит в том, чтобы запустить imageoptim при смене часов, а затем не дать ему увидеть свои собственные изменения как изменения, на которые нужно действовать снова)