2015-11-03 4 views
1

Я предварительно скомбинировал свои шаблоны в JS с помощью gulp-handlebars, но у меня возникли проблемы с получением пользовательских помощников руля также для предварительной компиляции. Кто-нибудь знает, есть ли какая-либо поддержка/способ прекомпиляции пользовательских вспомогательных методов?Как перекомпилировать помощников gulp-handlebars?

ответ

3

Я заметил, что руль-руль может использовать определенную рулевую библиотеку, по существу переопределяя ее по умолчанию. Итак, просто создав свой собственный модуль и зарегистрировав некоторых помощников, и подав его на вызов рулей, все работает локально.

// helpers.js 
var handlebars = require('handlebars'); 

handlebars.registerHelper('upper', function(str){ 
    return str.toUpperCase(); 
}); 

module.exports = handlebars; 

А потом в gulpfile (что-то вроде этого):

var handlebars = require('./src/js/helpers.js'); 

gulp.task('handlebars', function(){ 
    gulp.src('src/html/*.html') 
     .pipe(gulp_handlebars({handlebars: handlebars})) // override library here 
}); 
+0

ли эту работу для вас? –

+0

Yup. Несколько вещей пришлось изменить в среде prod, например, копировать файл helpers.js, но да, это действительно сработало. – puopg

+0

Спасибо за полезный ответ! Я использовал другой набор модулей и даже не должен был переопределять библиотеку - сама операция требует всего. Также: вы должны пометить свой собственный ответ как правильный, это классно по стандартам Stackoverflow. – Paracetamol

1

Если вы используете Browserify и необязательно watchify и нужен выход, чтобы быть модулем стиля CommonJS, проглатывать-defineModule будет использовать a require («Ручки») в скомпилированном файле шаблона. Это отменяет любые зарегистрированные помощники, которые вы передали в пользовательскую библиотеку gulp-handlebars (см. Выше). Ниже приведен пример выходного файла, мы не хотим:

// template.js 
var Handlebars = require("handlebars"); 
module.exports = Handlebars.template({"compiler":[7,">= 4.0.0"]... 

1: Чтобы это исправить, создайте файл helpers.js, который требует библиотеки Рулей, добавляет помощник, а затем экспортирует библиотеку , Использование Глоток-defineModule требует возможности пройти в библиотеке руля с помощниками, как так:

.pipe(defineModule('node', { 
     require: { 
      Handlebars: '../helpers' 
     } 
     }) 
    ) 

это будет производить:

// template.js 
var Handlebars = require("../helpers"); 
module.exports = Handlebars.template({... 

Обратите внимание, что относительный путь будет от выходного файла, и быть осторожными на prod, где путь к файлу может измениться.

2: Другой способ - использовать gulp-wrap для определения модуля точно так, как вы хотите. Что-то вроде:

.pipe(wrap('module.exports = function(Handlebars) {return Handlebars.template(<%= contents %>) }')) 

затем в главном-ЯШ:

var Handlebars = require('./helpers'); 
var template = require('./template)(Handlebars); 
Смежные вопросы