gulp.src使用sync globbing

时间:2015-02-12 20:11:53

标签: node.js npm gulp glob

我查看了gulp.src()的来源,显然它只是对require('vinyl-fs').src()的引用。查看vfs的src()的文档,它说它需要它定义的任何选项,“glob-stream和node-glob中记录了任何与glob相关的选项。”根据{{​​1}}的文档,我可以传递选项node-glob

但是,当我尝试使用{ sync: true }时,我从gulp得到了这个错误:

gulp.src(..., { sync: true })

知道如何使用TypeError: Object #<GlobSync> has no method 'on' 指定sync选项吗?

3 个答案:

答案 0 :(得分:4)

使用gulp.src(filePatterns).pipe(order(filePatterns))仍遇到问题。每次运行gulp时,连接的输出顺序现在保持不变,但是连接的顺序不是filePatterns数组文字指定的顺序。也许我错过了什么。

无论如何,我最终都在下面实施了这个解决方法。例如,gulp.src(filePatterns),我现在不再执行gulp.src(deglob(filePatterns)),而是每次都获得相同的顺序,并按照定义filePatterns数组文字的顺序。

function deglob() {
    var syncGlob = require('glob').sync,
        patterns = _.flatten(arguments, true);

    return _.flatten(patterns.map(function(pattern) {
        return syncGlob(pattern).map(function(file) {
            return pattern.charAt(0) === '!' ? ('!' + file) : file;
        });
    }), true);
}

我实际上完全停止使用gulp.src(),而是在任何地方使用它:

gulp.from = function () {
    return gulp.src(deglob(arguments));
};

答案 1 :(得分:1)

如果您需要文件按特定顺序使用gulp-sort(字母等)或gulp-order(全球)。

有关背景信息,请参阅此问题:https://github.com/gulpjs/gulp/issues/687

答案 2 :(得分:0)

我有以下解决方案,我在每个glob上单独应用StringComparisongulp-order并使用merge2来顺序合并流。

gulp.src

这样,var order = require('gulp-order'); var merge = require('merge2'); var paths = ['folder1/**/*', 'folder2/**/*']; var streams = paths.map(function (path) { return gulp.src(path) .pipe(order([path])); }); return merge.apply(this, streams); 确保每个单独的glob按固定(按字母顺序)排序,并合并连接流。

下行:路径必须是不相交的,否则是不可能的。

为了允许重叠,可以通过以下方式修改脚本以将其他路径添加为否定。这也允许否定。

order()