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

Using Browserify on only a subset of files in a folder within a Gulp task

通常使用 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 来 select 我希望从文件夹中浏览的文件:

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

但是因为这个 returns 是一个异步流而不是一个数组,所以你不能用它代替条目。然后我想我可以将单独的文件连接成一个虚拟文件,然后将其传递给 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'));
})

但这会引发未处理的错误事件 - 可能是因为在捆绑方法 运行s?

之前源文件尚未连接

所以这让我想问是否有人有执行类似或类似操作的经验?我是 gulp 的新手,因此也将不胜感激。谢谢

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