我试图使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;
        }));

});

10-08 13:37
查看更多