A gulp plugin to compile mustache HTML templates to JavaScript functions using hogan.
In templates/test.html
:
<p>Hello {{place}}</p>
In your gulpfile:
var compiler = require('gulp-hogan-compile');
gulp.task('templates', function() {
gulp.src('templates/**/*.html')
.pipe(compiler('templates.js'))
.pipe(gulp.dest('js/'));
});
In your code:
var templates = require('js/templates.js');
var html = templates.test.render({
place: 'world';
})
console.log(html); // <p>Hello world</p>
This will compile the templates into a JavaScript AMD module using hogan.compile
.
It will require('hogan')
so that module needs to be available. You can change the name/path of the hogan module at compile time with options.hoganModule
.
Alternatively you can pass an object to have it populated with executable templates, which is useful if you need templates as part of a build step, for example:
var compiler = require('gulp-hogan-compile');
var templates = {};
gulp.task('templates', function() {
gulp.src('templates/**/*.html')
.pipe(compiler(templates));
});
gulp.task('render', ['templates'], function() {
// Do something with templates, like passing to a static site generator
});
- dest
string|object
- Either the name of a file or an object - if using an object it will be populated with compiled template code and no file will be outputted (so all string output related options below are ignored)
- options
object
- Options passed to the hogan task
The line delimiter, defaults to your operating system's newline. Ignored if dest
is an object.
Either amd
, commonjs
or false
for no wrapper, defaults to amd
. If wrapper is false
a local var templates
will be defined containing the templates. Ignored if dest
is an object.
Options passed through to hogan.compile
. The asString
option will be set depending on whether output is a file or an object, any passed setting is ignored.
A function that will be passed the file and should return a name for the template. By default uses the relative path and basename of the file without an extension.
Override the variable name used for the templates, default is templates
. Useful when not using a wrapper in the browser and don't want it assigned to window.templates
.
The name of the hogan module in your app, defaults to hogan
. If you're not using a wrapper then the global Hogan
must be available.