【发布时间】:2014-07-06 08:23:56
【问题描述】:
在我的 gulp 构建中,我创建了一个在所有编译、丑化和缩小发生后运行的任务。此任务只是将 src 中的所有内容复制到 dest 目录中,这些内容尚未被早期任务触及/处理。我遇到的小问题是这会导致 dest 目录中的目录为空。
有没有办法告诉gulp.src glob 在模式匹配中只包含文件(例如提供'is_file' 标志)?
谢谢。
【问题讨论】:
标签: node.js glob gulp gulp-glob
在我的 gulp 构建中,我创建了一个在所有编译、丑化和缩小发生后运行的任务。此任务只是将 src 中的所有内容复制到 dest 目录中,这些内容尚未被早期任务触及/处理。我遇到的小问题是这会导致 dest 目录中的目录为空。
有没有办法告诉gulp.src glob 在模式匹配中只包含文件(例如提供'is_file' 标志)?
谢谢。
【问题讨论】:
标签: node.js glob gulp gulp-glob
通过向管道添加过滤器来修复它:
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));
// ...
【讨论】:
我知道我参加这个聚会迟到了,但对于其他偶然发现这个问题的人来说,还有另一种在我看来非常优雅的方法。我在this question找到它
为了排除我在 glob 模式后添加的空文件夹 { nodir: true }。
您的一般模式可能是这样的(使用来自Nick's answer 的变量):
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 文件的文件,并且也不会从这两个目录中复制任何空文件夹。
【讨论】: