GulpJS:忽略输出上的glob匹配

时间:2014-08-05 00:36:29

标签: glob gulp

我目前正在尝试通过执行以下操作来匹配几个文件夹:

gulp.src('workbench/fdw/**/public/admin/images/**')
  .pipe(gulp.dest('public/assets/admin/images/'))

这完美无缺,但输出结果如下:

public/assets/admin/images/core/public/admin/images/*

我希望第一个glob不被保留,看起来像:

public/assets/admin/images/*

任何人都知道我怎样才能改变我的全球效果?我确实需要第一个通配符,因为有一些未知数量的文件夹将被使用。

1 个答案:

答案 0 :(得分:0)

这对我有用,但我不知道你的完整文件结构。

var gulp = require('gulp');
var rename = require("gulp-rename");
var gulpIgnore = require('gulp-ignore');

gulp.task('default', ['clean'], function(){
    var common = 'public/admin/images';
    return gulp.src('workbench/fdw/**/public/admin/images/**')
    //this renames the image files
    .pipe(rename(function(path){
            var offset = path.dirname.indexOf(common);
            if (offset !== -1) {
                path.dirname = path.dirname.substring(offset+common.length+1);
            }
            return path;
     }))
    //this strips out the directories before the images files
    .pipe(gulpIgnore.include(function(file){
            return file.path.indexOf(common) === -1;
        }))
    .pipe(gulp.dest('public/assets/admin/images/'));
});

这是一个两步过程。重命名步骤会更正文件名,以便输出符合您的预期。问题是gulp.src发送的内容比我们想要的多。它包括所有父目录。通过仅保留此步骤,输出将包含foo/public/admin/images/等目录,这将导致public/assets/admin/images/foo/public/admin/images/。忽略步骤是过滤掉那些额外的目录。