Javascript 是否在节点脚本中加载预编译的把手模板?
我在Javascript 是否在节点脚本中加载预编译的把手模板?,javascript,node.js,handlebars.js,Javascript,Node.js,Handlebars.js,我在email template.hbs上有一个简单的把手模板,我想预编译并加载到我的app.js文件中,而无需每次运行app.js时都从文件系统读取并编译它 现在,我有一些东西看起来像这样: var handlebars = require('handlebars'); var fs = require('fs'); var source = fs.readFileSync('./email-template.hbs', 'utf-8'); var template = handlebars
email template.hbs
上有一个简单的把手模板,我想预编译并加载到我的app.js
文件中,而无需每次运行app.js
时都从文件系统读取并编译它
现在,我有一些东西看起来像这样:
var handlebars = require('handlebars');
var fs = require('fs');
var source = fs.readFileSync('./email-template.hbs', 'utf-8');
var template = handlebars.compile(source);
var handlebars = require('handlebars');
var template = require('email-template');
// app.js
var requireHbs = require('./requireHbs');
var template = requireHbs('email-template');
我宁愿吃这样的东西:
var handlebars = require('handlebars');
var fs = require('fs');
var source = fs.readFileSync('./email-template.hbs', 'utf-8');
var template = handlebars.compile(source);
var handlebars = require('handlebars');
var template = require('email-template');
// app.js
var requireHbs = require('./requireHbs');
var template = requireHbs('email-template');
其中,
email template.js
是预编译的email template.hbs
模板。让自己成为一个助手函数:
// requireHbs.js
var handlebars = require('handlebars');
var fs = require('fs');
var memoize = require('lodash.memoize');
module.exports = memoize(function requireHbs(templateName){
var filename = './' + templateName + '.hbs';
var source = fs.readFileSync(filename, 'utf-8');
return handlebars.compile(source);
});
然后像这样使用它:
var handlebars = require('handlebars');
var fs = require('fs');
var source = fs.readFileSync('./email-template.hbs', 'utf-8');
var template = handlebars.compile(source);
var handlebars = require('handlebars');
var template = require('email-template');
// app.js
var requireHbs = require('./requireHbs');
var template = requireHbs('email-template');
我是新来的节点和把手,并有相同的问题 诀窍是使用
-c
标志预编译模板(该标志预编译为节点的CommonJS模块格式,并为其提供所需的Handlebar运行时模块的路径)
如果您已经遵循了(npm install handlebar-g
)的说明,那么对于从/email template.hbs
生成email template.js
的示例,请尝试在命令行上运行以下命令:
handlebars ./email-template.hbs -f ./email-template.js -c handlebars/runtime
…这将生成一个电子邮件模板.js
在顶端。然后您可以在app.js
中使用它,如下所示:
var Handlebars = require('handlebars/runtime');
var hbtemplate = require('./email-template.js');
// You don't even seem to need the "var hbtemplate =" above,
// as precompiling puts your template into the Handlebars object.
var template = Handlebars.templates['email-template'];
// ...then you can use template(data) to generate the HTML string
我们的目标是避免完全从文件系统读取模板。为此,在-c选项之后,我错过了Handlebar/runtime,我没有发现这是必需的。@Jason这似乎不再有效了。我收到一个错误,说明
无法读取未定义的属性“email template”
。更多关于@Jason的信息,我的错误。我正在导入handlebar
,而不是handlebar/runtime
。但是这次它没有给我一个错误,但是模板
是未定义的
。所以我浏览了js文件,对上面的代码做了一些小的修改。我用var template=handlebar.templates['email-template.hbs']替换了您的代码片段代码>