2016-10-06 4 views
0

gulp-inject не работает с потоком событий.gulp-inject не работает с потоком событий

var gulp = require('gulp'); 
var mainBowerFiles = require('main-bower-files'); 
var inject = require('gulp-inject'); 
var es = require('event-stream'); 

var config = { 
    sassDir: './resources/assets/sass', 
    jsPath: './resources/app', 
    fontDir: './resources/fonts', 
    imageDir: './resources/images', 
    bowerDir: './bower_components' 
}; 

gulp.task('index', function() { 
    return gulp.src('./resources/index.html') 
     .pipe(inject(gulp.src(mainBowerFiles('**/*.js'), {read: false}), {name: 'bower'})) 
     .pipe(inject(es.merge(gulp.src(config.jsPath + '/**/*.js', {read: false})))) 
     .pipe(gulp.dest('./public')); 
}); 

Результат подходит как этот.

<!-- inject:js --> 
<script src="/resources/app/core.js"></script> 
<script src="/resources/app/first-folder/01.js"></script> 
<script src="/resources/app/second-folder/02.js"></script> 
<!-- endinject --> 

К сожалению mainBowerFiles('**/*.js') не сливаться с inject(es.merge(gulp.src(config.jsPath + '/**/*.js', {read: false})))

enter image description here

+0

Непонятно, что вы на самом деле хотите. Как выглядит ваш HTML раньше и как вы хотите, чтобы он выглядел впоследствии? –

+0

И почему вы используете '{name: 'bower'}', если у вас нет секции ''? –

+0

@SvenSchoenung, даже если remove' {name: 'bower'} ', результат тот же. пожалуйста, посмотрите скриншот в прикрепленном скриншоте в вопросе – Muhammed

ответ

1

Вашей проблемой в том, что вы вызываете inject()дважды с двумя различными источниками (основными Бауэр файлами и файлами в resources/app), но вы хотите, чтобы оба источника были введены в один и тот же раздел.

Что вам нужно сделать, это вызов inject()раз с уже слившихся источников:

gulp.task('index', function() { 
    return gulp.src('./resources/index.html') 
    .pipe(inject(es.merge(
     gulp.src(mainBowerFiles('**/*.js'), {read: false}), 
     gulp.src(config.jsPath + '/**/*.js', {read: false}) 
    ))) 
    .pipe(gulp.dest('./public')); 
}); 

EDIT: Если вы хотите сохранить порядок файлов вы можете использовать streamqueue вместо es.merge():

var streamqueue = require('streamqueue'); 

gulp.task('index', function() { 
    return gulp.src('./resources/index.html') 
    .pipe(inject(streamqueue({ objectMode: true }, 
     gulp.src(mainBowerFiles('**/*.js'), {read: false}), 
     gulp.src(config.jsPath + '/**/*.js', {read: false}) 
    ))) 
    .pipe(gulp.dest('./public')); 
}); 
+0

awesome, он работает, но листинг смешивается с беседкой и customjs :( – Muhammed

+1

См. Мое редактирование выше. –

Смежные вопросы