2.0.1 • Published 8 years ago

gulp-render-nunjucks v2.0.1

Weekly downloads
1
License
MIT
Repository
github
Last release
8 years ago

gulp-render-nunjucks

A gulp plugin to render nunjucks templates with the following features:

  • Render each nunjucks template from gulp.src, optionally with gulp-data and/or a shared data context
  • Template file.data (via gulp-data) through one (or more) templates to create multiple outputs
  • Use your preferred nunjucks version (1.x peer dependency)
  • 100% code coverage with a full suite of tests

installation

npm install gulp-render-nunjucks --save-dev

While not required, gulp-data and gulp-rename are very useful with this plugin.

npm install gulp-data gulp-rename --save-dev

api

// Render gulp.src as nunjucks template(s).
// Use "render" when each source file is a nunjucks template.
// A simple use-case is to render a static site using nunjucks features such
// as include, extends etc.
require('gulp-render-nunjucks').render( [data] );
// Render template.njk for each file in gulp.src
// Use "template" to pass the source files as data to the template.
// A simple use case is a gulp.src of json, where each file should be rendered using the same
// template.
require('gulp-render-nunjucks').template('template.njk')

usage

render(data)

gulpfile.js

var rename = require('gulp-rename');
var njk = require('gulp-render-nunjucks');

gulp.task('html', function(){
    return gulp.src(['tpl1.njk', 'tpl2.njk'])
        .pipe(njk.render())
        .pipe(rename({ extname: '.html' })
        .pipe(gulp.dest('dest'));
});

output

dest/tpl1.html
dest/tpl2.html

template('template-name.njk')

gulpfile.js

var data        = require('gulp-data');
var rename      = require('gulp-rename');
var requireNew  = require('require-new');
var njk         = require('gulp-render-nunjucks');

gulp.task('html', function(){
    return gulp.src(['data/foo.js', 'data/bar.json'], { base: 'data', read: false })
        .pipe(data(function (file) {
            return requireNew(file.path);
        }))
        .pipe(njk.template('foobar.njk'))
        .pipe(rename({ extname: '.html' })
        .pipe(gulp.dest('dest'));
});

output

dest/foo.html
dest/bar.html

template(function(file){...})

gulpfile.js

var data        = require('gulp-data');
var rename      = require('gulp-rename');
var requireNew  = require('require-new');
var njk        = require('gulp-render-nunjucks');

gulp.task('html', function () {
    return gulp.src(['data/foo.js', 'data/bar.json'], { base: 'data', read: false })
        .pipe(data(function (file) {
            return requireNew(file.path);
        }))
        .pipe(njk.template(function (file) {
            if(file.relative === 'foo.js'){
                return 'preview.njk';
            }
            return 'feature.njk';
        }))
        .pipe(rename({ extname: '.html' })
        .pipe(gulp.dest('dest'));
});

output

dest/foo.html   // rendered using preview.njk
dest/bar.html   // rendered using feature.njk

notes

If using gulp-data and passing a data context to render(), a merged context will be passed to the template. When merging the data, keys from file.data (from gulp-data) will overwrite the default data context passed to render().

For example:

gulpfile.js

var data = require('gulp-data');
var rename = require('gulp-rename');
var njk = require('gulp-render-nunjucks');

gulp.task('html', function () {
    return gulp.src(['tpl1.njk', 'tpl2.njk'])
        .pipe(data(function (file) {
            return {
                // 1. 'message' will not be overwritten when data is merged  
                message: 'hello from ' + file.relative
            }
        }))
        // 2. 'message' will be overwritten with the value from gulp-data.
        .pipe(njk.render({ message: 'hello'))
        .pipe(rename({ extname: '.html' })
        .pipe(gulp.dest('dest'));
});

output

dest/tpl1.html  // message = 'hello from tpl1.html'
dest/tpl2.html  // message = 'hello from tpl2.html'

tests

npm test (or mocha) - Runs all tests npm run coverage - Check code coverage

2.0.1

8 years ago

2.0.0

9 years ago

1.0.6

9 years ago

1.0.5

9 years ago

1.0.4

9 years ago

1.0.3

9 years ago

1.0.2

9 years ago

1.0.1

9 years ago

1.0.0-develop

9 years ago