2013-12-17 20 views
5

Czy można oglądać wiele plików/folderów, ale zoptymalizować tylko jeden plik za pomocą polecenia grunt-contrib-imagemine i grunt-contrib-watch?Grunt imagemin - oglądać wiele plików/folderów zoptymalizować pojedynczy plik?

Próbowałem tak: (część gruntfile)

imagemin: { 
    dist: { 
    cwd: 'images/modules', 
    files: ['images/modules/**/*.{png,jpg,gif}'], 
    dest: 'images/modules' 
    } 
}, 

watch: { 
    images: { 
     files: ['images/modules/**/*.{png,jpg,gif}'], 
     tasks: ['imagemin'], 
     options: { 
     spawn: false, 
     } 
    } 
} 

grunt.event.on('watch', function(action, filepath, target) { 
    if (grunt.file.isMatch(grunt.config('watch.images.files'), filepath)) { 
     grunt.config('imagemin.dist.src', [filepath]); 
    } 
}); 

Ale to nie działa. Zwraca:

Running "imagemin:dist" (imagemin) task 
Verifying property imagemin.dist exists in config...OK 
Files: [no src] -> images/modules 
Options: optimizationLevel=7, progressive, pngquant=false 
Options: optimizationLevel=7, progressive, pngquant=false 
Warning: path must be a string 

Jakieś pomysły? Dziękuję Ci.

Odpowiedz

7

Na podstawie parametru-contrib-imagemin docs atrybut pliku przyjmuje obiekt pary src/dest (klucz/wartość).

files: {       // Dictionary of files 
    'dist/img.png': 'src/img.png', // 'destination': 'source' 
    'dist/img.jpg': 'src/img.jpg', 
    'dist/img.gif': 'src/img.gif' 
    } 

Uważam, że właśnie dlatego pojawia się błąd.

Aby zrobić, co chcesz, przynajmniej to, co myślę, że chcesz dodać kolejne podzadanie do imagemin jak poniżej.

imagemin: { 
    dist: { 
    files: [{ 
    expand: true,        // Enable dynamic expansion 
    cwd: 'images/modules',      // Src matches are relative to this path 
    src: ['images/modules/**/*.{png,jpg,gif}'],// Actual patterns to match 
    dest:'images/modules'      // Destination path prefix 
    }] 
    }, 
    single: { 
    cwd: 'images/modules', 
    files: 'images/modules/img.png': 'images/modules/img.png', 
    dest: 'images/modules' 
    } 

}, 
watch: { 
    images: { 
     files: ['images/modules/**/*.{png,jpg,gif}'], 
     tasks: ['imagemin:single'], 
     options: { 
     spawn: false, 
     } 
    } 
} 

więc powyższe polecenie zegarek będzie oglądać wszystkie pliki, które pasują do wyrażenia regularnego pliki i przeprowadzi single podzadania z watch głównego zadania.

Jeszcze raz myślę, że to jest to, co chcesz zrobić, ale jeśli nie, możesz to wyjaśnić bardziej?