管道供应商将来自Bower的js文件和自己的js文件转换为Gulp中的唯一流

时间:2014-09-09 19:41:56

标签: javascript bower gulp

我想从bower依赖项中获取供应商js文件,并且与我自己的js文件一起,管理其他一些任务并将它们连接成一个.js文件。然后对Sass文件执行相同的操作。

我怎么能实现这一目标?我试过这个,但它不起作用:

gulp.task('scripts', function () {
   return gulp.src([
        mainBowerFiles(gulpFilter('*.js')),
        'app/js/*.js'
        ])
      .pipe(uglify())
      .pipe(concat('app.js'))
      .pipe(gulp.dest('./dist/js'));
});

它抛出了这个错误:

TypeError: Arguments to path.resolve must be strings

但如果我有这个,那就有用了,例如:

gulp.src([
    'app/js/etc.js',
    'app/js/main.js'
])

..在下面的例子中,它会抛出一个不同的错误(但没有uglify()没有错误):

gulp.src(mainBowerFiles(gulpFilter('*.js')))

错误:

events.js:72
        throw er; // Unhandled 'error' event

如何更好地调试此问题?我应该在不同的流中分离供应商/自己的js文件吗?

更新

我现在正在使用两个流,稍后将它们与event-stream合并,如下所示:

gulp.task('scripts', function () {

    var jsFilter = gulpFilter('*.js');
    var vendorFiles = gulp.src(mainBowerFiles()) // don't read
        .pipe(jsFilter)
        .pipe(concat('vendor.js'));

    var appFiles = gulp.src('app/js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'))
        .pipe(concat('app.js'));

    return es.concat(vendorFiles, appFiles)
        .pipe(uglify())
        .pipe(concat('app.js'))
        .pipe(gulp.dest('./dist/js'));
});

效果很好,但我无法处理文件的顺序。显然,我希望供应商代码出现在目的地app.js的代码之前,但事实并非如此。我创建了一个关于here的帖子。

2 个答案:

答案 0 :(得分:3)

使用gulp-event-streamgulp-order解决了问题。尽管如此,让我感到有点意味着gulp-order在向下https://www.npmjs.org呈下降趋势。

gulp.task('scripts', function () {

    var jsFilter = gulpFilter('*.js');
    var vendorFiles = gulp.src(mainBowerFiles())
        .pipe(jsFilter)
        .pipe(concat('vendor.js'));

    var appFiles = gulp.src('app/js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'))
        .pipe(concat('app.js'));

    return eventStream.concat(vendorFiles, appFiles)
        .pipe(order([
            "vendor.js",
            "app.js"
        ]))
        .pipe(concat('app.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist/js'));
});

答案 1 :(得分:1)

mainBowerFiles()返回一个数组。 gulp.src期待一个字符串数组,而不是嵌套数组,这可能是第一个问题的原因。您可以尝试以下方法:

gulp.src(mainBowerFiles(gulpFilter('*.js')).push('app/js/*.js'))

我不确定是什么导致了未处理的错误事件,但您可以尝试使用gulp-debug来获取更多信息。