Javascript 如何预编译gulp Handlebar助手?
我正在使用gulp Handlebar将我的模板预编译到JS中,但在让自定义Handlebar助手也预编译时遇到了困难。有人知道是否有任何支持/方法可以预编译自定义助手方法吗?我注意到gulp Handlebar可以使用特定的Handlebar库,基本上覆盖了它的默认值。因此,通过创建我自己的模块并注册一些助手,并将其输入到Handlebar调用中,事情就可以在本地运行了Javascript 如何预编译gulp Handlebar助手?,javascript,gulp,handlebars.js,precompile,Javascript,Gulp,Handlebars.js,Precompile,我正在使用gulp Handlebar将我的模板预编译到JS中,但在让自定义Handlebar助手也预编译时遇到了困难。有人知道是否有任何支持/方法可以预编译自定义助手方法吗?我注意到gulp Handlebar可以使用特定的Handlebar库,基本上覆盖了它的默认值。因此,通过创建我自己的模块并注册一些助手,并将其输入到Handlebar调用中,事情就可以在本地运行了 // helpers.js var handlebars = require('handlebars'); handle
// 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
});
我注意到gulp Handlebar可以使用特定的Handlebar库,基本上覆盖了它的默认值。因此,通过创建我自己的模块并注册一些助手,并将其输入到Handlebar调用中,事情就可以在本地运行了
// 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
});
如果您使用的是Browserify和watchify,并且需要输出为commonjs样式的模块,gulp defineModule将在编译的模板文件中使用require'handlebar'。 这将否定您传递到gulp Handlebar自定义库选项(见上文)中的任何注册助手。下面是我们不想要的输出文件的示例:
// template.js
var Handlebars = require("handlebars");
module.exports = Handlebars.template({"compiler":[7,">= 4.0.0"]...
1:要解决此问题,请创建一个helpers.js文件,该文件需要Handlebar库,添加helpers,然后导出库。使用gulp defineModule的require选项与以下助手一起进入把手库:
.pipe(defineModule('node', {
require: {
Handlebars: '../helpers'
}
})
)
这将产生:
// template.js
var Handlebars = require("../helpers");
module.exports = Handlebars.template({...
请注意,相对路径将来自outputfile,请注意prod中的文件路径可能会更改
2:另一种方法是使用gulp wrap来准确地定义您想要的模块。比如:
.pipe(wrap('module.exports = function(Handlebars) {return Handlebars.template(<%= contents %>) }'))
如果您使用的是Browserify和watchify,并且需要输出为commonjs样式的模块,gulp defineModule将在编译的模板文件中使用require'handlebar'。 这将否定您传递到gulp Handlebar自定义库选项(见上文)中的任何注册助手。下面是我们不想要的输出文件的示例:
// template.js
var Handlebars = require("handlebars");
module.exports = Handlebars.template({"compiler":[7,">= 4.0.0"]...
1:要解决此问题,请创建一个helpers.js文件,该文件需要Handlebar库,添加helpers,然后导出库。使用gulp defineModule的require选项与以下助手一起进入把手库:
.pipe(defineModule('node', {
require: {
Handlebars: '../helpers'
}
})
)
这将产生:
// template.js
var Handlebars = require("../helpers");
module.exports = Handlebars.template({...
请注意,相对路径将来自outputfile,请注意prod中的文件路径可能会更改
2:另一种方法是使用gulp wrap来准确地定义您想要的模块。比如:
.pipe(wrap('module.exports = function(Handlebars) {return Handlebars.template(<%= contents %>) }'))
是的。在prod环境中,有一些事情需要更改,例如通过helpers.js文件进行复制,但确实有效。感谢您的帮助!我使用的是一套不同的模块,甚至不需要重写库——只需要require操作本身。另外:你应该把自己的答案标记为正确,按照Stackoverflow的标准,这是很酷的……A然后停止工作;我只能猜测这可能是由于某些节点自动更新+吞咽行为不当所致。在prod环境中,有一些事情需要更改,例如通过helpers.js文件进行复制,但确实有效。感谢您的帮助!我使用的是一套不同的模块,甚至不需要重写库——只需要require操作本身。另外:你应该把自己的答案标记为正确,按照Stackoverflow的标准,这是很酷的……A然后停止工作;只能猜测这可能是由于某些节点自动更新+吞咽行为不当所致