在 Node 脚本中加载预编译的 Handlebars 模板?
Load precompiled Handlebars template in Node script?
我在 email-template.hbs
有一个简单的 Handlebars 模板,我想预编译并加载到我的 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');
其中 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);
});
然后像这样使用它:
// app.js
var requireHbs = require('./requireHbs');
var template = requireHbs('email-template');
我是 Node 和 Handlebars 的新手,也有同样的问题。
诀窍是使用 -c
标志预编译您的模板(预编译为 Node 的 CommonJS 模块格式,并为其提供所需的 handlebars 运行时模块的路径)。
假设您已经按照 setting up precompilation (npm install handlebars -g
) 的说明进行操作,那么对于从 ./email-template.hbs
生成 email-template.js
的示例,请尝试 运行 在命令行上:
handlebars ./email-template.hbs -f ./email-template.js -c handlebars/runtime
...应该产生一个 email-template.js
var Handlebars = require("handlebars/runtime"); var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
在顶部。然后你可以像这样在你的 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
我在 email-template.hbs
有一个简单的 Handlebars 模板,我想预编译并加载到我的 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');
其中 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);
});
然后像这样使用它:
// app.js
var requireHbs = require('./requireHbs');
var template = requireHbs('email-template');
我是 Node 和 Handlebars 的新手,也有同样的问题。
诀窍是使用 -c
标志预编译您的模板(预编译为 Node 的 CommonJS 模块格式,并为其提供所需的 handlebars 运行时模块的路径)。
假设您已经按照 setting up precompilation (npm install handlebars -g
) 的说明进行操作,那么对于从 ./email-template.hbs
生成 email-template.js
的示例,请尝试 运行 在命令行上:
handlebars ./email-template.hbs -f ./email-template.js -c handlebars/runtime
...应该产生一个 email-template.js
var Handlebars = require("handlebars/runtime"); var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
在顶部。然后你可以像这样在你的 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