假设我们有以下文件夹结构:
rootDirectory
│
│
├──a
│ ├──a.txt
│
├──b
│ ├──a
│ ├──a.txt
│
├──c.txt
另外,假设我们需要编写一个Gulp任务,a.txt
文件夹中的a
和c.txt
;对它们执行一些操作,然后将它们传递到build
目录。我想要的是在build文件夹中复制的文件将其目录结构保存在build
文件夹中(我不希望任务不应该处理的文件进入build
}文件夹),像这样:
rootDirectory
│
│
├──a
│ ├──a.txt
│
├──b
│ ├──a
│ ├──a.txt
│
├──c.txt
│
├──build
│
├──a
│ ├──a.txt
│
├──c.txt
现在,这就是困扰我的。如果我指定特定文件的路径:
gulp.task('foo', function(){
var files = [
path.join(__dirname, 'c.txt'),
path.join(__dirname, 'a/a.txt')
];
gulp.src(files)
.pipe(gulp.dest(path.join(__dirname, build));
});
然后我将展平build
目录中的文件夹结构。
但是,如果我使用了globbing模式:
gulp.task('foo', function(){
var files = [
path.join(__dirname, '**/c.txt'),
path.join(__dirname, '**/a/a.txt')
];
gulp.src(files)
.pipe(gulp.dest(path.join(__dirname, build));
});
然后保留文件夹结构,但是这个通配模式也会定位b/a.txt
,这是我不想要的。
有没有办法实现我在Gulp中描述的内容?基本上,告诉Gulp:"在这里,拿这个文件,用这个做任何你需要的东西,并把它放在另一个路径上,保持文件夹结构从这个根路径开始"? 除了特别否定我不想匹配的globbing路径?
答案 0 :(得分:6)
为了保留层次结构,您应该将{base: "."}参数传递给gulp.src。像这样:
gulp.task('foo', function(){
var files = [
path.join(__dirname, 'c.txt'),
path.join(__dirname, 'a/a.txt')
];
gulp.src(files, {base: '.'})
.pipe(gulp.dest(path.join(__dirname, build));
});