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

aza*_*gru 3 gulp

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

rootDirectory
     ?
     ?
     ???a
     ?  ???a.txt
     ?
     ???b
     ?  ???a
     ?     ???a.txt
     ?
     ???c.txt
Run Code Online (Sandbox Code Playgroud)

同时,假设我们需要写一个咕嘟咕嘟的任务,将采取a.txta的文件夹,c.txt; 对它们执行一些操作,然后将它们传递到build目录中.我想要的是在build文件夹中复制的文件将其目录结构保存在build文件夹中(我不希望任务不应该处理的build文件进入文件夹),如下所示:

rootDirectory
     ?
     ?
     ???a
     ?  ???a.txt
     ?
     ???b
     ?  ???a
     ?     ???a.txt
     ?
     ???c.txt
     ?
     ???build
          ?
          ???a
          ?  ???a.txt
          ?          
          ???c.txt
Run Code Online (Sandbox Code Playgroud)

现在,这就是困扰我的.如果我指定特定文件的路径:

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));
});
Run Code Online (Sandbox Code Playgroud)

然后我将展平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));
});
Run Code Online (Sandbox Code Playgroud)

然后保留文件夹结构,但这个globbing模式也将目标b/a.txt,我不想要.

有没有办法实现我在Gulp中描述的内容?基本上,告诉Gulp:"在这里,拿这个文件,用这个做任何你需要的东西,把它放在另一个路径上,保持文件夹结构从这个根路径开始"?除了明确否定我不想匹配的通路径之外

Vla*_*den 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));
});
Run Code Online (Sandbox Code Playgroud)

  • 看起来你只是在传递'.' 作为第二个论点.不应该是{base:'.'}? (4认同)