8

在我的gulp构建中,我做了一个在所有编译、丑化和缩小发生后运行的任务。此任务只是将src中的所有内容复制到dest目录中,这些目录尚未被早期任务触及/处理。我遇到的一个小问题是这会导致dest目录中的目录为空。

有没有办法告诉gulp.srcglob 只在模式匹配中包含文件(比如提供'is_file'标志)?

谢谢。

4

2 回答 2

8

通过向管道添加过滤器来修复它:

var es = require('event-stream');


var onlyDirs = function(es) {
  return es.map(function(file, cb) {
      if (file.stat.isFile()) {
        return cb(null, file);
      } else {
        return cb();
      }
  });
};
// ...

var s = gulp.src(globs)
        .pipe(onlyDirs(es))
        .pipe(gulp.dest(folders.dest + '/' + module.folder));

// ...
于 2014-05-18T09:00:01.573 回答
7

我知道我参加这个聚会迟到了,但是对于其他偶然发现这个问题的人来说,还有另一种方法可以做到这一点,在我看来这似乎很优雅。我在这个问题中找到了

{ nodir: true }为了排除我在 glob 模式之后添加的空文件夹 。

您的一般模式可能是这样的(使用尼克答案中的变量):

gulp.src(globs, { nodir: true })
    .pipe(gulp.dest(folders.dest + '/' + module.folder));

我的情况如下:

gulp.src(['src/**/*', '!src/scss/**/*.scss', '!src/js/**/*.js'], { nodir: true })
    .pipe(gulp.dest('dev/'));

这会从src目录中选择所有不是scss 或 js 文件的文件,并且也不会从这两个目录中复制任何空文件夹。

于 2016-05-20T14:54:55.607 回答