Load pre-compiled Handlebars template in Node script?

I have a simple Handlebars template in email-template.hbswhich I would like to precompile and load into my file app.jswithout reading from the file system and compiling it every time it executes app.js.

I now have something similar to this:

var handlebars = require('handlebars');
var fs = require('fs');

var source = fs.readFileSync('./email-template.hbs', 'utf-8');
var template = handlebars.compile(source);

I would prefer something like this:

var handlebars = require('handlebars');
var template = require('email-template');

Where email-template.jsis the precompiled template email-template.hbs.

+4
source share
2 answers

I am new to Node and Handlebars and asked the same question.

, , -c ( Node CommonJS) , ).

, (npm install handlebars -g), email-template.js ./email-template.hbs, :

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
+13

:

// 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');
0

All Articles