用于src的gulp搜索文件夹并保存到父文件夹

时间:2017-06-27 14:26:19

标签: javascript gulp

我正在尝试让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'文件夹并将图像保存在其中。

2 个答案:

答案 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))
});