我试图使gulp任务通过给定目录,在所有子目录中(递归地也在所有可能的子目录中搜索)搜索具有特定名称(src)的文件夹,并将目标文件夹定位到父文件夹。
因此,每个在内部都有名为SRC的文件夹的文件夹将成为该SRC文件夹内图像的目标。文件将以相同的名称保存
这是我到目前为止所拥有的:
gulp.task('img', function() {
gulp.src('../../../uploads/slider-images/**/src/*.jpg')
.pipe(plumber(plumberErrorHandler))
.pipe(imagemin({
optimizationLevel: 7,
progressive: true
}))
.pipe(gulp.dest(function (file) {
var destPath = file.base.split("/").pop().join('/');
return destPath;
}));
});
它不起作用,保持“压缩图像”为0,我必须退出该过程。
任何帮助表示赞赏
编辑
文件夹结构示例
--gulpFolder
--testimages
--headers
--src
--funky
--src
现在我到了这段代码:
gulp.task('img', function () {
let plumberErrorHandler = (err) => {
console.log('Plumber Err', err);
};
var sourcePath = '../testimages/';
var endPath;
return gulp.src(sourcePath + '**/src/**/*.jpg')
.pipe(plumber(plumberErrorHandler))
.pipe(imagemin({
optimizationLevel: 6,
progressive: true
}))
.pipe(rename(function(file) {
let dir = file.dirname.split('\\');
dir.pop();
file.dirname = dir.join('/');
endPath = sourcePath + file.dirname + '/';
gutil.log(file);
}))
.pipe(gulp.dest(function(file) {
return endPath;
}));
});
它记录了文件的正确属性,但我不知道为什么它总是重新创建一个名为“ headers”的文件夹并将图像保存在那里。
在示例情况下,它在'headers'文件夹内创建一个名为headers的文件夹,在'funky'文件夹内创建另一个文件夹,并将图像保存在其中。
最佳答案
我认为这只是没有设置正确的路径(.pop()表现出您所期望的不同),使用gulp-imagemin进行了尝试并设置了目标。如果我理解您的用例正确:
# before
../../images/one/src/img.jpg
../../images/two/src/img.jpg
# after run
../../images/two/img.jpg
../../images/one/src/img.jpg
../../images/two/img.jpg
../../images/one/src/img.jpg
对于这种情况,这将是实现:
const path = require('path');
const gulp = require('gulp');
const imagemin = require('gulp-imagemin');
const plumber = require('gulp-plumber');
const rename = require('gulp-rename');
gulp.task('img', function () {
let plumberErrorHandler = (err) => {
console.log('Plumber Err', err);
};
const sourcePath = '...//testimages';
return gulp.src(path.join(sourcePath, '/**/src/**/*.jpg'))
.pipe(plumber(plumberErrorHandler))
.pipe(imagemin({
optimizationLevel: 0,
progressive: true
}))
.pipe(rename(function(file) {
let dir = file.dirname.split('/');
dir.pop(); // remark - pop removes the src in this case
file.dirname = path.join(sourcePath, dir.join('/'));
}))
.pipe(gulp.dest(function(file) {
return sourcePath;
}));
});