Gulp:保留单个文件的目标文件夹结构

时间:2016-02-05 09:33:18

标签: gulp

假设我们有以下文件夹结构:

rootDirectory
     │
     │
     ├──a
     │  ├──a.txt
     │
     ├──b
     │  ├──a
     │     ├──a.txt
     │
     ├──c.txt

另外,假设我们需要编写一个Gulp任务,a.txt文件夹中的ac.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路径?

1 个答案:

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