Javascript 链吞球到browserify变换

Javascript 链吞球到browserify变换,javascript,gulp,glob,browserify,Javascript,Gulp,Glob,Browserify,我有一个项目,有几个相对不相交的页面,每个页面都有自己的入口点脚本。这些脚本需要使用commonjs语法的大量其他脚本,需要通过6to5进行转换,并通过browserify进行捆绑 我想设置一个gulp任务,捕获与模式匹配的所有文件并将它们传递给bundler,但我不确定如何将文件从gulp.src传递到browserify(filename) 我的gulpfile看起来像: var gulp = require("gulp"); var browserify = require("browse

我有一个项目,有几个相对不相交的页面,每个页面都有自己的入口点脚本。这些脚本
需要使用commonjs语法的大量其他脚本,需要通过6to5进行转换,并通过browserify进行捆绑

我想设置一个gulp任务,捕获与模式匹配的所有文件并将它们传递给bundler,但我不确定如何将文件从
gulp.src
传递到
browserify(filename)

我的gulpfile看起来像:

var gulp = require("gulp");
var browserify = require("browserify");
var to5browserify = require("6to5-browserify");
var source = require("vinyl-source-stream");

var BUNDLES = [
    "build.js",
    "export.js",
    "main.js"
];

gulp.task("bundle", function () {
    /* Old version, using glob:
    return gulp.src("src/** /*.js")
        .pipe(sixto5())
        .pipe(gulp.dest("dist"));
    */

    // New version, using array:
    return BUNDLES.map(function (bundle) {
        return browserify("./src/" + bundle, {debug: true})
            .transform(to5browserify)
            .bundle()
            .pipe(source(bundle))
            .pipe(gulp.dest("./dist"));
    });
});

gulp.task("scripts", ["bundle"]);

gulp.task("html", function () {
    return gulp.src("src/**/*.html")
        .pipe(gulp.dest("dist"));
});

gulp.task("styles", function () {
    return gulp.src("src/**/*.css")
        .pipe(gulp.dest("dist"));
});

gulp.task("default", ["scripts", "html", "styles"]);
这似乎是可行的,但不可维护:我将在相对较短的时间内添加更多脚本,不希望每次都将它们添加到阵列中

我尝试在browserify调用中使用
gulp.src(glob.pipe
,并在调用()后使用管道,
gulp.src(glob.map
(方法不存在)


如何使用基于名称的转换器(如browserify)链接
gulp.src

您可以在BUNDLES数组中指定glob,也可以排除任何文件:

var BUNDLES = [
    "app/**/*.js",
    "export.js",
    "app/modules/**/*.js",
    "!app/modules/excluded/*.js"
];
用于创建一个一次性的自定义插件流,以完成所有脏活

不幸的是,随之而来的解决方案都有缺陷,所以我们必须按照自己的习惯去做

var gulp = require('gulp');
var through = require('through2');
var browserify = require('browserify');

gulp.task('bundle', function() {
    var browserified = function() {
        return through.obj(function(chunk, enc, callback) {
            if(chunk.isBuffer()) {
                var b = browserify(chunk.path);
                    // Any custom browserify stuff should go here
                    //.transform(to5browserify);

                chunk.contents = b.bundle();

                this.push(chunk);

            }
            callback();
        });
    };

    return gulp.src(['./src/**/*.js'])
        .pipe(browserified())
        .pipe(gulp.dest('dest'));
});

当模块'src/***.js'
在进入browserify的过程中遇到glob时,这只会引发一个错误
找不到模块'src/***.js'。这看起来非常接近,但我在涉及6to5时遇到了一个问题。使用代码但在
.bundle()
之前添加
.transform()
调用会导致“结束后写入”错误。我尝试将
{read:false}
选项添加到
gulp.src
调用中,但这导致我的dist dir为空。使用
pipe(through.obj())
消除了“结束后写入”错误,但输出文件被浏览,但没有6to5-ified。在编辑之后(以及在聊天中花费的一些时间),这似乎解决了问题。它感觉有点像黑客,但似乎工作得很好(在本地和CI中)。