Web サイトで使用するレスポンシブ画像を効率的に生成しようとしていますが、既存のファイルとパスを gulp で処理するのに問題があります。画像は、階層構造のフォルダーに存在します。ここpages
は、いくつかのサブフォルダーが下に向かって再帰するルートです。そのほとんどに画像があります。
私の現在のタスクは次のようになります。
gulp.task('responsive', function() {
gulp.src('pages/**/*.{jpg,png}')
.pipe($.plumber({
errorHandler: function (err) {
console.log(err);
this.emit('end');
}
}))
.pipe(responsive({
'**/*.*': [{
width: 2240,
suffix: '-2240',
quality: 70
}, {
width: 1920,
suffix: '-1920',
quality: 70
}, {
width: 1600,
suffix: '-1600',
quality: 70
}, {
width: 1280,
suffix: '-1280',
quality: 70
}, {
width: 1280,
height: 300,
crop: true,
gravity: 'Center',
suffix: '-thumbwide',
quality: 70
}, {
width: 960,
suffix: '-960',
quality: 70
}, {
width: 640,
suffix: '-640',
quality: 70
}, {
width: 480,
suffix: '-480',
quality: 70
}, {
width: 320,
suffix: '-320',
quality: 70
}]
}))
.pipe(gulp.dest(function(file) {
return file.base;
}));
});
これには 2 つの主な問題があります。
- 画像はソースと同じフォルダーにパイプされますが、ソースの
images
隣のフォルダーにあることが望ましい場合です。 - タスクが再度実行されると、ソースと以前に生成されたレスポンシブ イメージの両方に基づいて新しいファイルが生成されます。
このタスクは、サイズ変更に GraphicsMagick を利用するgulp-responsive-images を使用します。問題 2 を解決するためにgulp-changed (set as ) を使用し.pipe($.cached('pages'))
てみましたが、効果がないようでした。
現在のセットアップに基づいて、問題 1 と 2 を解決するにはどうすればよいですか?