我查看了gulp.src()的源代码,显然它只是对require('vinyl-fs').src()的引用。在查看vfs的src()文档时,它说它采用了它定义的任何选项,“任何与全球相关的选项都记录在glob流和节点glob中。”根据node-glob的文档,我可以传递选项{ sync: true }。
然而,当我尝试使用gulp.src(..., { sync: true })时,我从gulp中得到了这个错误:
TypeError: Object #<GlobSync> has no method 'on'知道如何用sync指定gulp.src()选项吗?
发布于 2015-02-16 18:30:07
使用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));
};发布于 2015-02-12 23:32:40
如果您需要按一定顺序排列文件,请使用狼吞虎咽 (字母等)。或吞咽顺序 (globs)。
有关背景信息,请参阅此问题:https://github.com/gulpjs/gulp/issues/687
发布于 2015-12-28 13:28:20
我有以下解决方案,我将gulp.src和吞咽顺序分别应用于每个glob,并使用merge2对流进行顺序合并。
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);这样,order()确保每个单独的glob按固定的(字母顺序)排序,并合并连接流。
缺点:路径必须是不相交的,而否定是不可能的。
为了允许重叠,可以按照以下方式修改脚本,将其他路径添加为否定式。这也允许否定。
var paths = [['src/**/*.module.js'], ['src/**/*.js', '!src/**/*.module.js']];
var streams = paths.map(function (path) {
return gulp.src(path)
.pipe(order(path));
});
return merge.apply(this, streams);https://stackoverflow.com/questions/28486866
复制相似问题