是否可以将来自gulp.src
流的文件列表作为数组获取,例如:
var files = convertToArray(gulp.src('**/*.js'));
更新
我试图摆脱gulp-karma插件:
gulp.task('test', function () {
return gulp.src(files)
.pipe($.order(ordering))
.pipe($.karma({
karma.conf.js'
});
});
所以我的想法是:
gulp.task('test', function (done) {
var karmaFiles = convertToArray(gulp.src(files)
.pipe($.order(ordering)));
new Server({
configFile: karma.conf.js',
files: karmaFiles
}, done).start();
});
但正如所指出的那样,由于它是异步的,因此不会起作用。这是我的解决方案:
gulp.task('test', function (done) {
gulp.src(files)
.pipe($.order(ordering)))
.pipe(gutil.buffer())
.on('data', function(data) {
var karmaFiles = data.map(function(f) { return f.path; });
new Server({
configFile: __dirname + '/karma.conf.js',
files: karmaFiles
}, done).start();
});
});
答案 0 :(得分:4)
Gulp流始终是异步的,因此您的假设convertToArray
函数(接受流并返回数组)是不可能的。
获取流中所有文件的唯一方法是通过某种回调函数。 gulp-util
包捆绑各种帮助函数,提供了很好的gutil.buffer()
:
var gutil = require('gulp-util');
gulp.src('**/*.js').pipe(gutil.buffer(function(err, files) {
console.log('Path of first file:');
console.log(files[0].path);
console.log('Contents of first file:');
console.log(files[0].contents.toString());
}));
上面的files
将是vinyl
个文件的数组。这意味着对于每个文件,您都可以访问文件的contents
和path
。
如果您不关心文件内容并且只想要每个文件的路径,则根本不应使用gulp.src()
。您应该使用glob
代替(这是gulp在内部使用的内容)。它为您提供了一个返回匹配文件路径数组的同步方法:
var glob = require('glob');
var files = glob.sync('**/*.js');
console.log(files);