2016-03-09 4 views
1

У меня создалось впечатление, а также от просмотра code, что положительный глобус будет ограничен только отрицательными глобусами, которые появляются ПОСЛЕ ЭТОГО.gulp.src (glob-stream) положительный глобус после матча отрицательного glob убивает

Так как приходит, что

gulp.src([ 
      '../WebContent/g/css/ng-client.css' 
     ],{base: '../WebContent'}).pipe(using()) 

приводит ng-client.css быть перечислены.

Хотя

gulp.src([ 
      '!../WebContent/g/css/*', 
      '../WebContent/g/css/ng-client.css' 
     ],{base: '../WebContent'}).pipe(using()) 

не перечисляет тот же файл?

Я хочу выяснить, что не так с тем, как я думаю о тех потоках глобуса, которые заставляют меня ожидать, что второй блок кода также вернет файл - не решение, как преодолеть этот сценарий, я видел предложения, как в: Glob/minimatch: how to gulp.src() everything, then exclude folder but keep one file in it

, и я знаю, что я могу сделать что-то подобное, как:

gulp.src([ 
     '!../WebContent/g/css/!(ng-client.css)', 
     '../WebContent/g/css/ng-client.css' 
    ],{base: '../WebContent'}).pipe(using()) 

Добротность почему не второй вернуть файл, как я ожидать, что это?

ответ

2

Это интересно.

Ваше чтение исходного кода glob-stream представляется правильным. Он также соответствует документации самого glob-stream. Но тогда почему gulp ведет себя иначе, чем ожидалось? Я думаю, это потому, что вы не используете код, который вы читали.

Даже при новой установке gulp вы не используете новейшую версию glob-stream. Вот соответствующий отрывок из npm list из проекта я только что создал:

├─┬ [email protected] 
│ └─┬ [email protected] 
│ ├─┬ [email protected] 

Это означает, что [email protected] используется. Исходный код, который вы связали, составляет от [email protected].

Просматривая теги версии glob-stream на GitHub, первое упоминание о заказе glob в документации находится в 4.0.1. Таким образом, похоже, что между основными версиями и 4.x было сделано несовместимое изменение поведения.

Мы можем проверить это, запустив glob-stream непосредственно:

var gs = require('glob-stream'); 
gs.create([ 
    '!../WebContent/g/css/ng*', 
    '../WebContent/g/css/ng-client.css' 
]).pipe(using()); 

Запуск этого с [email protected] (в последнем выпуске 3.x) не возвращает файлы. Запуск с [email protected]делает возвращает файл ng-client.css.

Вещь, которая заставляет меня задуматься, заключается в том, что gulp documentation явно упоминает поведение, которое вы ожидали.Но на самом деле работает тот же самый пример кода, которые они используют в своей documenation не дает результатов, которые они утверждают:

gulp.src(['client/*.js', '!client/b*.js', 'client/bad.js']) 

Запуск этого с [email protected] возвращает только client/a.js, но не client/bad.js.

Похоже, что у кого-то еще была такая же проблема. Существует модуль под названием gulp-src-ordered-globs (который относится к this a GitHub issue). Используя этот модуль, как ваш пример, так и документ из документации Gulp.js работают должным образом.

Если вы действительно хотите разобраться во всем этом, вероятно, лучше всего открыть проблему на GitHub или ask somebody on the Gulp.js Gitter.

+0

большое спасибо. Я посмотрю на gulp-src-ordered-globs, как вы предложили. – epeleg