我正在尝试让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的文件夹。文件夹和另一个内置的' funky'文件夹并将图像保存在其中。
答案 0 :(得分:1)
我认为只是没有设置正确的路径(.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;
}));
});
答案 1 :(得分:1)
我使用了错误的PATH var。
正确的任务代码:
const path = require('path');
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) {
file.dirname = path.dirname(file.dirname);
file.basename = file.basename;
return file;
}))
.pipe(gulp.dest(sourcePath))
});