仅在Gulp任务中的文件夹中的一部分文件上使用Browserify

通常在使用Browserify时,如果要合并多个文件,请运行以下内容:

gulp.task('build-tests', function() { var b = browserify({ entries: ['./lib/some_specs.js', './lib/some_more_specs.js'] }); b.bundle().pipe(source('specs.js')).pipe(gulp.dest('./dist')); }) 

我想用dynamic创build的已过滤文件列表来replace条目,这样,每次添加一个我想要浏览的新文件时,就不必更新数组,而是自动执行此操作。

为此,我开始使用gulp-filter从文件夹中select我想要浏览的文件:

 gulp.src('lib/*.js') .pipe(gulpFilter('*_specs.js')) .pipe(concat('specs.js')) ); 

但是因为这返回一个asynchronousstream而不是一个数组,所以你不能使用这个入口。 然后,我想我可以将单独的文件连接成一个虚拟文件,然后将其传递给Browserify。 喜欢这个:

 gulp.task('build-tests', function() { var b = browserify( gulp.src('lib/*.js') .pipe(gulpFilter('*_specs.js')) .pipe(concat('specs.js')) ); b.bundle().pipe(source('specs.js')).pipe(gulp.dest('./dist')); }) 

但是这会抛出一个未处理的错误事件 – 也许是因为源文件在bundle方法运行之前没有被连接起来?

那么这就导致我问,是否有人有任何类似的经验或沿着这些方面的经验? 我很新的吞噬,所以任何指针也将不胜感激。 谢谢。

改用glob模块。

 var glob = require('glob').sync; gulp.task('build-tests', function () { var b = browserify({ entries: glob(['./lib/**/*.js']) }); b.bundle().pipe(source('specs.js')).pipe(gulp.dest('./dist')); });