2014-11-18 2 views
0

Я до сих пор довольно новичок в глотании, так что это может быть непонимание с моей стороны.Piping concat via gulp.src changes gulp.src glob

Я глоток трубопровода Я пытаюсь создать что-то делает так:

gulp.src('src/**/*.html') 
    .pipe(html2js({some:options})) 
    .pipe(concat('templates.js')) 
    .pipe(gulp.src('src/**/*.js')) 
    .pipe(uglify()) 
    .pipe(gulp.dest('build/')) 

Когда я запускаю это однако, второй Glob не ловит весь .js файлов. Если я запускаю две отдельные линии трубопровода как:

gulp.src('src/**/*.html') 
    .pipe(html2js({some:options})) 
    .pipe(concat('template.js')) 
    .pipe(gulp.dest('build/')); 

gulp.src(['src/**/*.js', 'build/template.js']) 
    .pipe(uglify()) 
    .pipe(gulp.dest('build/')); 

Работает должным образом. Ошибок не возникает, и в первом случае template.js добавляется в конец списка файлов, как я ожидал.

Любые предложения были бы весьма полезными.

+1

https://github.com/wearefractal/vinyl-fs/issues/25 – Heikki

+1

https://github.com/urish/gulp-add-src – Heikki

ответ

1

Gulp.src принимает glob и опции, поэтому он не может обрабатывать поток, который передается в него в вашем первом скрипте.

Вы можете использовать подход, аналогичный вашему первому используя gulp-filter:

var filter = gulpFilter('**/*.html'); 
gulp.src(['src/**/*.html', 'src/**/*.js']) 
    .pipe(filter) 
    .pipe(html2js({some:options})) 
    .pipe(concat('templates.js')) 
    .pipe(filter.restore()) 
    .pipe(uglify()) 
    .pipe(gulp.dest('build/')) 

В противном случае, следуя линии вашего второго образца, вы можете использовать merge-stream для объединения потоков, прежде чем uglifying:

var merge = require('merge-stream'); 

var htmlStream = gulp.src('src/**/*.html') 
    .pipe(html2js({some:options})) 
    .pipe(concat('template.js')); 

return merge(htmlStream, gulp.src('src/**/*.js')) 
    .pipe(uglify()) 
    .pipe(gulp.dest('build/')); 
+0

не ли gulp.src, который теперь, хотя, по крайней мере, из gulp 3.8? https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#380 Или я просто использую эту функцию как-то неправильно? – Myles

+0

Я не знал об этом: спасибо, что указали это. Я должен попробовать. – Ghidello

2

Вы должны зарегистрироваться gulp-merge. Он разработан, чтобы объединить глотком трубопроводов:

var gulpMerge = require('gulp-merge'); 

gulp.task('build', function() { 
    return gulpMerge(
     gulp.src('src/**/*.html') 
      .pipe(html2js({some:options})) 
      .pipe(concat('template.js')), 

     gulp.src('src/**/*.js') 
    ) 
    .pipe(uglify()) 
    .pipe(gulp.dest('build/')); 
}); 
+0

Я не думал об этом, я посмотрю, как это работает, но он все еще не отвечает на исходный вопрос о том, почему шарик изменил его соответствие. – Myles

+0

Только для потомков, салфетка, gulp-merge делает трюк. – Myles

+0

'gulp-merge' был, по-видимому, переименован в' merge2' в октябре 2014 года, а старый пакет 'gulp-merge' был недавно [yanked from npm] (https://github.com/teambition/merge2/issues/5). Этот ответ должен быть обновлен, чтобы рекомендовать 'merge2', а не' gulp-merge'. –