使用合并流的 gulp-order Node 模块

6
我正在使用gulp-order模块,结合event-streams模块和gulp-concat将JavaScript文件合并成一个目标文件。 gulp-order插件在其他项目中为我很好地工作,当我想按照特定顺序从流中合并文件时。但是,在这个项目中,它似乎无法正常工作,公共/ angular / config目录中的文件散布在我指定要在public / js目录中最后合并的文件之间。我认为这可能与指定多个源即angular和js目录有关。我尝试使用event-streams模块合并流,但没有成功,而当我开始时,我通过将数组传递给gulp.src函数来指定多个源。
gulp.src(['./public/angular/**/*.js', './public/js/*.js'])

以下是我目前正在使用的代码。管道和连接操作都没有问题,但是顺序不符合规范:
var gulp         = require('gulp');
var concat       = require('gulp-concat');
var notify       = require('gulp-notify');
var handleErrors = require('../util/handleErrors');
var jshint       = require('gulp-jshint');
var ngmin        = require('gulp-ngmin');
var order        = require('gulp-order');
var es           = require('event-stream');

function getStream(streamPath) {
  return gulp.src(streamPath);
};

gulp.task('scripts', function() {
    return es.merge(getStream('./public/angular/**/*.js'),getStream('./public/js/*.js'))
        .pipe(order([
          './public/angular/config/*.js',
          './public/angular/services/**/*.js',
          './public/angular/modules/**/*.js',
          './public/angular/primitives/**/*.js',
          './public/js/**/*.js'
        ]))
        .pipe(concat('app.js'))
        .pipe(gulp.dest('./public/build/js'))
        .on('error', handleErrors);
});

同样的问题,昨天还能用,现在就不行了。 - Nick
1
嘿@Nick,我放弃了订单模块并开始使用streamqueue。效果很好,你可以在我的github上查看https://github.com/dtothefp/gulp-angular-foundation/blob/master/gulp/tasks/scripts.js - dtothefp
原来我是个傻瓜,我改变了文件名...难怪它们顺序错乱了!!!顺便说一下,你可以使用order或者只是用gulp.src([file1,file2,file3*])来解决这个问题。我认为streamqueue并不是必要的。 - Nick
1个回答

12

我遇到了相同的问题,我使用了gulp-print来查看我的流中的文件名,但它们是正确的。后来我发现我需要在gulp-order中添加base选项,然后一切都正常了。

gulp.src(['myFiles/*', 'myOtherFiles/*'])
   .pipe(order([
      'myOtherFiles/lib1.js',
      'myFiles/lib2.js'
   ], {base: '.'});

有用的文章:http://martinwolf.org/2014/08/12/force-a-concatenation-order-with-gulp-js/

更新: 博客文章的新链接:https://martinwolf.org/blog/2014/08/force-a-concatenation-order-with-gulp-js


这对我也解决了问题。从 gulp.src 直接进行管道传输需要使用此基本选项似乎有些奇怪。 - Austin Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接