我正在尝试有效地生成在网站上使用的响应式图像,但是在处理 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;
}));
});
这有两个主要问题:
- 图像被传送到与其源相同的文件夹中,而它们最好位于
images
源旁边的 - 文件夹中。 - 如果再次运行该任务,它会根据源和先前生成的响应图像生成新文件。
该任务使用gulp-responsive-images,它利用 GraphicsMagick 来调整大小。我尝试使用gulp-changed (set as .pipe($.cached('pages'))
) 来解决问题 2,但它似乎没有任何效果。
根据我当前的设置,如何解决问题 1 和 2?