gulp-apply-template
v0.0.2
Published
Apply templates to file contents
Downloads
9
Readme
gulp-apply-template
Apply templates to file contents.
For each file in the stream, replace the file's contents by rendering a template, using the file object as the template's data or context.
Similar to gulp-wrap, with these differences:
- Uses consolidate.js to support multiple template engines.
- Uses properties from File object itself as template context.
Usage
Install as a development dependency:
npm install --save-dev gulp-apply-template
Then, use it in your gulpfile.js
:
var applyTemplate = require('gulp-apply-template');
gulp.task('pages', function () {
return gulp.src('pages/*.html')
.pipe(applyTemplate({
engine: 'swig',
template: 'templates/layout.tpl'
})
.pipe(gulp.dest('dist'));
});
API
gulp-apply-template
is called with a single options object as an argument.
The available options are:
engine
Type: string
or function(context, file)
required
The template engine to use. If a function, it will be called with these arguments, returning the engine name to use:
context: The template context
file: The File object being processed
template
Type: string
or function(context, file)
required
The template file path to use. If a function, it will be called with
the same arguments as engine
, returning the template path.
context
Type: object
or function(file)
The default template context to use. If a function, it will be called with
one argument, file
, the File object. Defaults to an empty object. These
will always override properties assigned from the File object.
props
Type: array
Array of names of File object properties to assign to template context,
defaults to ['path', 'contents', 'data']
.
Examples
Use gulp-front-matter to dynamically determine template engine and path to use:
gulp.src('pages/*.md')
.pipe(frontMatter({
property: 'data'
}))
.pipe(applyTemplate({
engine: function (context) {
return context.data.templateEngine;
},
template: function (context) {
return context.data.templatePath;
}
})
.pipe(gulp.dest('dist'));
Ignore Vinyl File properties and use only contents and data provided by gulp-data:
gulp.src('pages/*.md')
.pipe(data(function (file) {
return require('./properties/' + file.basename + '.json');
}))
.pipe(applyTemplate({
engine: 'swig',
props: ['contents', 'data'],
context: function (file) {
return file.data;
}
})
.pipe(gulp.dest('dist'));