2

通常使用 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 方法运行之前源文件没有被连接?

所以这让我问是否有人有执行类似或类似的事情的经验?我对 gulp 很陌生,所以任何指针也将不胜感激。谢谢。

4

1 回答 1

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'));
});
于 2015-01-12T19:39:05.430 回答