如何预编制gulp-handlebars助手?

时间:2015-11-03 05:14:05

标签: javascript gulp handlebars.js precompile

我正在使用gulp-handlebars将我的模板预编译到JS中,但我无法获得自定义手柄助手以进行预编译。有没有人知道是否有任何支持/方式来预编译自定义帮助方法?

2 个答案:

答案 0 :(得分:3)

我注意到gulp-handlebars可以使用特定的把手库,基本上覆盖了它的默认值。因此,通过创建我自己的模块并注册一些帮助程序,并将其提供给句柄调用,事情就在本地工作。

// 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
});

答案 1 :(得分:2)

如果你正在使用Browserify并且可选择观察并需要输出为commonjs样式模块,gulp-defineModule将在编译的模板文件中使用require('Handlebars')。 这会否定您已经传入gulp-handlebars自定义库选项的任何已注册助手(参见上文)。以下是我们不想要的输出文件示例:

//Function that changes color (i used it in my P1 and it worked)
public static void ChangeColors(ConsoleColor backgroundColor, ConsoleColor foregroundColor) 
{
    Console.BackgroundColor = backgroundColor;
    Console.ForegroundColor = foregroundColor;
}

1:要解决此问题,请创建一个需要手柄库的helpers.js文件,添加帮助程序,然后导出库。使用gulp-defineModule的require选项传递带有帮助器的把手库,如下所示:

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

这会产生:

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

请注意,相对路径将来自outputfile,并且在文件路径可能发生变化的prod上要小心。

2:另一种方法是使用gulp-wrap来准确定义模块的方式。类似的东西:

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

然后在main-js:

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