我如何注册和使用Handlebars助手和Node?

我正在使用Handlebars和Node,并且工作正常:

require('handlebars'); var template = require('./templates/test-template.handlebars'); var markup = template({ 'some': 'data' }); console.log(markup); 

这工作正常。 但是,我需要在我的模板中注册并使用自定义帮助器。 所以,现在我的代码如下所示:

 var Handlebars = require('handlebars'); Handlebars.registerHelper('ifEqual', function(attribute, value) { if (attribute == value) { return options.fn(this); } else { return options.inverse(this); } }); var template = require('./templates/test-template.handlebars'); var markup = template({ 'some': 'data' }); console.log(markup); 

但现在当我运行我的脚本,我得到了

错误:缺less帮手:'ifEqual'

所以:我怎样才能定义和使用节点中的自定义助手?

我想到了。 我需要这样做:

 var Handlebars = require('handlebars/runtime')['default']; 

一个非常酷的是,这甚至可以在Browserify浏览器中运行。

但是,我发现更好的方法(也许是“正确的”方法)是通过(shell命令)预编译Handlebars模板:

 handlebars ./templates/ -c handlebars -f templates.js 

然后我这样做:

 var Handlebars = require('handlebars'); require('./templates'); require('./helpers/logic'); module.exports.something = function() { ... template = Handlebars.templates['template_name_here']; ... }; 

这是我做到的方式。
我想现在的情况有点不一样。

 const Handlebars = require('handlebars'); module.exports = function(){ Handlebars.registerHelper('stringify', function(stuff) { return JSON.stringify(stuff); }); }; 

然后我做了一个脚本来调用所有帮助者的require,这样他们就可以跑了。

 // Helpers Builder let helpersPath = Path.join(__dirname, 'helpers'); fs.readdir(helpersPath, (err, files) => { if (err) {throw err;} files.filter((f) => { return !!~f.indexOf('.js'); }).forEach((jsf) => { require(Path.join(helpersPath, jsf))(); }); }); 

或简单的方法

 require('./helpers/stringify')(); 

事实上,你甚至不必把它导出为一个函数,你根本就不能导出任何东西,只需要从另一个js文件中调用require而不用结束函数params。