仅在Gulp任务中的文件夹中的文件子集上使用Browserify

时间:2015-01-12 16:29:25

标签: javascript node.js gulp browserify gulp-concat

通常使用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'));
})

我想用动态创建的过滤文件列表替换条目,这样每次添加我想要浏览器化的新文件时都不必更新数组,而是自动执行此操作。

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

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

但是因为这会返回异步流而不是数组,所以不能在条目中使用它。然后我认为我可以将单独的文件连接到一个虚拟文件中,然后将其传递给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方法运行之前源文件没有被连接起来?

因此,这引导我询问是否有人有任何类似或类似的经历?我很擅长吞咽,所以任何指针也会受到赞赏。感谢。

1 个答案:

答案 0 :(得分:2)

请改用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'));
});