tutorial compile gulp mustache

compile - ¿Cómo compilo parciales de plantillas de bigote con gulp?



install gulp windows (2)

Realizo prototipos de páginas HTML estáticas con Mustache / Sass / Compass-watch bajo Ruby. Esta configuración es MUY lenta, así que quiero pasar a compilar todo con Gulp. Logré que compilara Sass, pero no Moustache. Simplemente no ve parciales en las plantillas de bigote. Mi estructura de archivos es así:

. ├── css ├── scss ├── index.html ├── gulpfile.js └── templates ├── index.mustache └── partials └── header.mustache

donde index.mustache es:

{{> partials/head }} <body> {{> partials/header }} <div class="wrap"> {{> some_inner_partial }} <div class="content"> ... </div> </div> {{> partials/footer }} </body> </html>

Mi gulpfile.js es como sigue:

var gulp = require(''gulp''); var sass = require(''gulp-sass''); var sourcemaps = require(''gulp-sourcemaps''); var mustache = require("gulp-mustache-plus"); // Gulp Sass Task gulp.task(''sass'', function() { gulp.src(''./scss/{,*/}*.{scss,sass}'') .pipe(sourcemaps.init()) .pipe(sass({ errLogToConsole: true })) .pipe(sourcemaps.write()) .pipe(gulp.dest(''./css'')); }); // Gulp Mustache Task gulp.task(''mustache'', function() { gulp.src("./templates/*.mustache") .pipe(mustache({},{},{ file_1: "partials/*.mustache" })).pipe(gulp.dest("./")); }); gulp.task(''default'', [''sass'', ''mustache''], function () { gulp.watch(''./scss/{,*/}*.{scss,sass}'', [''sass'']); gulp.watch(''./templates/{,*/}*.{mustache}'', [''mustache'']); });

Entonces, cuando ejecuto gulp en la consola, construye scss-> css bien y busca cambios, pero en cuanto a bigote construye etiquetas html pero no parciales y tampoco observa los cambios en los archivos de bigote.

Obviamente hay algo mal con la tarea del bigote. Por favor, ayúdame a entender lo que me falta aquí. Soy muy nuevo en los corredores de tareas, nunca antes había usado Gulp / Grunt.


A primera vista, diría que necesita actualizar su tarea con:

gulp.task(''mustache'', function() { gulp .src("./templates/**/.mustache") .pipe(gulp.dest("./")); });

¿Lo arregla?


Así que descubrí la solución. Para hacer que Gulp mire los cambios de bigote, tuve que cambiar gulp.watch por gulp.watch(''./templates/**/*.mustache'', [''mustache'']); Y para hacer que gulp-bigote-plus vea los parciales necesito crear manualmente un objeto con nombre y ruta parcial y pasarlo como un tercer parámetro a la tarea del bigote. Y eso es todo, porque nadie quiere hacer un trabajo manual, ¿verdad?

De todos modos, el archivo gulpfile.js debe verse así:

var gulp = require(''gulp''); var sass = require(''gulp-sass''); var sourcemaps = require(''gulp-sourcemaps''); var mustache = require("gulp-mustache-plus"); // Gulp Sass Task gulp.task(''sass'', function() { gulp.src(''./scss/{,*/}*.{scss,sass}'') .pipe(sourcemaps.init()) .pipe(sass({ errLogToConsole: true })) .pipe(sourcemaps.write()) .pipe(gulp.dest(''./css'')); }); // Gulp Mustache Task gulp.task(''mustache'', function() { gulp.src("./templates/*.mustache") .pipe(mustache({},{},{ head: "./templates/layout/head.mustache", header: "./templates/modules/header.mustache", ... etc.... //any oter partials })).pipe(gulp.dest("./")); }); gulp.task(''default'', [''sass'', ''mustache''], function () { gulp.watch(''./scss/{,*/}*.{scss,sass}'', [''sass'']); gulp.watch(''./templates/**/*.mustache'', [''mustache'']); });

Y luego en mis archivos de bigote tuve que poner nombres de parciales de ese objeto:

{{> head }} <body> {{> header }} <div class="wrap"> {{> some_inner_partial }} <div class="content"> ... </div> </div> {{> footer }} </body> </html>

Ahora todo funciona bien