我查看了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
选项吗?
答案 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上单独应用StringComparison
和gulp-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()