2017-02-12 10 views
1

Ich habe folgenden Lenker Struktur:Wie Lenker Vorlagen minify mit schluck-Lenker

├── gulpfile.js 
└── source/ 
    └── templates/ 
     ├── view1/ 
     │ └── template11.handlebars 
     └── view2/ 
      └── template21.handlebars 

Und diese bekommen:

└── target/ 
    └── js/ 
     ├── view1.min.js  
     └── view2.min.js 

Die Frage ist, wie tatsächliche minified vorkompilierte Vorlagen zu erstellen. Im Moment bekomme ich nur die offene vorkompilierte js.

Mein gruntfile.js ist:

const pump = require('pump') 
const rename = require('gulp-rename') 
const handlebars = require('gulp-handlebars') 

gulp.task('build-templates', (done) => { 

    const views = [ 
     'view1', 
     'view2' 
    ] 

    let pipe = [] 

    views.forEach((view) => { 
     pipe.push(gulp.src('source/templates/' + view + '/**/*')) 
     pipe.push(handlebars()) 
     pipe.push(rename(view +'.templates.min.js')) 

     // pipe.push(uglify()) <-- this gives me the error: 
     // [13:40:38] GulpUglifyError: unable to minify JavaScript 
     // Caused by: SyntaxError: Unexpected token: punc (:) (line: 1, col: 11, pos: 11)" 

     pipe.push(gulp.dest('target/js')) 
    }) 

    pump(pipe, done) 

}) 

ich pump nur mit bin zu lassen node.js wissen, dass es um die Quelle zu schließen hat, wenn ein Prozess einen Fehler ergibt, während die Rohrbearbeitung.

Danke! :)

Antwort

1

Ich erkannte nicht, dass ich den kompilierten Code als Parameter zu Handlebars.template() wickeln musste. Deutlich in gulp-handlebars docs hingewiesen. :(Also das Ergebnis war kein gültiger JS-Code und Uglify konnte damit nicht umgehen. Die Lösung ist:

const pump = require('pump') 
const concat = require('gulp-concat') 
const wrap = require('gulp-wrap') 
const declare = require('gulp-declare') 
const handlebars = require('gulp-handlebars') 
const uglify = require('gulp-uglify') 

gulp.task('build-templates', (done) => { 

    const views = [ 
     'view1', 
     'view2' 
    ] 

    let pipe = [] 

    views.forEach((view) => { 
     pipe.push(gulp.src('source/templates/' + view + '/**/*')) 
     pipe.push(handlebars()) 
     pipe.push(wrap('Handlebars.template(<%= contents %>)')) // <-- this is the key 
     pipe.push(declare({ 
      namespace: 'MyApp.templates', // <-- get easy access to templates 
      noRedeclare: true, // <-- Avoid duplicate declarations 
     })) 
     pipe.push(concat(view + '.templates.js')) // <-- use concat instead of rename to concatenate several templates 
     pipe.push(uglify()) // <-- done 
     pipe.push(gulp.dest('target/js')) 
    }) 

    pump(pipe, done) 

})