2016-04-20 1 views
1

En ce moment j'ai deux tâches: templates et js. templates doit être exécuté en premier afin que les modifications soient récupérées par js. Je veux combiner ceux-ci, ce qui élimine le fichier intermédiaire, de sorte que la tâche fonctionne comme ceci:Comment combiner ces deux tâches de Gulp en une seule?

  1. Compile et concaténer modèles en un seul morceau de JS
  2. Concatenate ce morceau avec le reste du code de mon application JS
  3. Sortie le tout en un seul fichier

Comment est-ce que je peux faire ceci?

Voici mon code actuel:

var gulp   = require('gulp'); 
var handlebars = require('gulp-handlebars'); 
var concat  = require('gulp-concat'); 
var wrap   = require('gulp-wrap'); 
var declare  = require('gulp-declare'); 

// Compile Handlebars templates into JS 
gulp.task('templates', function() { 
    return gulp.src('./templates/*.hbs') 
    .pipe(handlebars({ 
     handlebars: require('handlebars') 
    })) 
    .pipe(wrap('Handlebars.template(<%= contents %>)')) 
    .pipe(declare({ 
     namespace: 'templates', 
     noRedeclare: true, 
    })) 
    .pipe(concat('templates.js')) 
    .pipe(gulp.dest('./js/')); 
}); 

// Concatenate and minify application JS 
gulp.task('js', function() { 
    return gulp.src('./js/*.js') 
    .pipe(concat('app.js')) 
    .pipe(gulp.dest('./dist/js')); 

Répondre

-1

Pour moi, le easyest et plus propre façon est d'appeler une tâche après l'autre avec

gulp.task('js', ['templates'], function(){ 
.... 

De cette façon, la tâche js besoin de l'exécution des modèles Tâche

Garder la compilation et la concaténation finale en 2 tâches séparées n'est pas si mal pour moi.

Permettez-moi de savoir si ce n'est pas une solution viable pour vous

EDIT

dans une seule tâche, vous pouvez essayer d'utiliser la fusion-stream

et faire

var merge = require('merge-stream'); 
gulp.task('templates', function() { 
    var jsStream = gulp.src('./js/*.js') 
    .pipe(concat('all.js')); 
    var templateStream = gulp.src('./templates/*.hbs') 
    .pipe(handlebars({ 
     handlebars: require('handlebars') 
    })) 
    .pipe(wrap('Handlebars.template(<%= contents %>)')) 
    .pipe(declare({ 
     namespace: 'templates', 
     noRedeclare: true, 
    })) 
    .pipe(concat('templates.js')); 

    merge(jsStream, templateStream) 
    .pipe(concat('app.js')) 
    .pipe(gulp.dest('./dist/js')); 
}); 

Je l'ai fait par cœur sans essayer donc mon travail ne fonctionne pas comme prévu

+0

J'essaie d'éliminer le fichier intermédiaire, nommé templates.js dans ce cas. J'essaie de le faire de la manière Gulp et de le faire en mémoire jusqu'à la sortie finale. – Stewart

+0

Je suppose que vous avez d'autres fichiers que template.js dans ./js/ ai-je raison? – rick

+0

regardez l'édité – rick