Модуль узла gulp-order с объединенными потоками

Я использую модуль gulp-order вместе с модулем потоков событий и gulp-concat для объединения файлов javascript в один файл назначения. Плагин gulp-order отлично работал у меня в других проектах, где я хотел объединить файлы из потока в определенном порядке. По какой-то причине в этом проекте он не работает должным образом, и файлы в каталоге public/angular/config рассредоточены среди файлов, которые я указываю конкатенировать последними в каталоге public/js. Я думаю, что это может иметь какое-то отношение к указанию нескольких источников, т.е. каталоги angular и js. Я безуспешно пытался объединить потоки с модулем потоков событий, тогда как в самом начале я указал несколько источников, передав массив функции 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);
});

person dtothefp    schedule 06.05.2014    source источник
comment
Та же проблема, вчера работало, а сейчас нет.   -  person Nick    schedule 22.05.2014
comment
Привет, @Nick, я отказался от модуля заказа и начал использовать очередь потоков. Отлично работает, вы можете проверить это на моем github github.com/dtothefp/gulp-angular-foundation/blob/master/gulp/   -  person dtothefp    schedule 22.05.2014
comment
оказывается, я дурак, я изменил имена файлов.. неудивительно, что они были не по порядку!!! Кстати, вы можете сделать это по порядку или просто использовать gulp.src([file1,file2,file3*]) . Я не думаю, что очередь потоков необходима.   -  person Nick    schedule 23.05.2014


Ответы (1)


У меня была такая же проблема, и я использовал gulp-print, чтобы увидеть имена файлов в моем потоке, но они были правильными. Я обнаружил, что мне нужно добавить опцию base к gulp-order, после чего все заработало.

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

person Clint Powell    schedule 11.11.2014
comment
Это исправило это и для меня. Кажется странным, что для прямого трубопровода из gulp.src требуется этот базовый вариант. - person Austin Thompson; 23.10.2015