dst*_*ley 5 javascript node.js handlebars.js
我有一个简单的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);
Run Code Online (Sandbox Code Playgroud)
我宁愿有这样的事情:
var handlebars = require('handlebars');
var template = require('email-template');
Run Code Online (Sandbox Code Playgroud)
email-template.js预编译email-template.hbs模板在哪里.
小智 18
我是Node和Handlebars的新手,也有同样的问题.
诀窍是使用-c标志预编译模板(预编译为Node的CommonJS模块格式,并为其提供所需的车把运行时模块的路径).
鉴于你已经遵循的方向设置预编译(npm install handlebars -g),然后为您生成的例子email-template.js从./email-template.hbs,尝试在命令行中运行以下命令:
handlebars ./email-template.hbs -f ./email-template.js -c handlebars/runtime
Run Code Online (Sandbox Code Playgroud)
......这应该产生一个email-template.js与
var Handlebars = require("handlebars/runtime"); var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
Run Code Online (Sandbox Code Playgroud)
在顶部.然后你可以在你的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
Run Code Online (Sandbox Code Playgroud)