将gulp.src流转换为数组?

时间:2017-01-11 15:21:56

标签: gulp

是否可以将来自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();
        });

});

1 个答案:

答案 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个文件的数组。这意味着对于每个文件,您都可以访问文件的contentspath

如果您不关心文件内容并且只想要每个文件的路径,则根本不应使用gulp.src()。您应该使用glob代替(这是gulp在内部使用的内容)。它为您提供了一个返回匹配文件路径数组的同步方法:

var glob = require('glob');

var files = glob.sync('**/*.js');
console.log(files);