我目前正在尝试通过执行以下操作来匹配几个文件夹:
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/*
任何人都知道我怎样才能改变我的全球效果?我确实需要第一个通配符,因为有一些未知数量的文件夹将被使用。
答案 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/
。忽略步骤是过滤掉那些额外的目录。