我正在使用gulp-handlebars将我的模板预编译到JS中,但我无法获得自定义手柄助手以进行预编译。有没有人知道是否有任何支持/方式来预编译自定义帮助方法?
答案 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 %>) }'))