Skip to content

vicompany/grunt-mustache-combine

Repository files navigation

grunt-mustache-combine Build Status

Combine Mustache templates into one file.

Getting Started

This plugin will combine all your Mustache templates into one file (object) and use the path of the file as the key. It won't pre-parse the file, because Mustache will do that on the first render.

Install

$ npm install --save-dev grunt-mustache-combine

Usage

require('load-grunt-tasks')(grunt); // npm install --save-dev load-grunt-tasks

grunt.initConfig({
  mustache_combine: {
    all: {
      files: {
        'js/templates.js': ['templates/**/*.mustache']
      }
    }
  }
});

grunt.registerTask('default', ['mustache_combine']);

Examples

Custom config and rules

grunt.initConfig({
  mustache_combine: {
    options: {
      format: 'amd',
      extension: '.html',
      removeFromKey: 'path/to/'
    },
    all: {
      files: {
          'dist/templates.js': ['path/to/templates/**/*.html']
      }
    }
  }
});

Options

options.format

Type: String Default: 'es6' Other possible values: 'commonjs', 'amd', 'es5'

The format to output.

options.extension

Type: String Default: '.mustache'

The extension to remove from the key.

options.removeFromKey

Type: String Default: ''

Part of the file path to remove from the key.

options.useLowerCaseKey

Type: Boolean Default: true

Generate lower case keys. Set to false to ignore casing.

options.formatKey

Type: Function Default: null

Function to generate a custom key. It overrules the removeFromKey and useLowerCaseKey options and receives the file path as a parameter.

grunt.initConfig({
  mustache_combine: {
    options: {
      formatKey: function(filepath) {
        return filepath
          .replace('path/to/templates/', 'tpl-')
          .toUpperCase();
      }
    },
    all: {
      files: 'js/template.js': ['path/to/templates/**/*.mustache']
    }
  }
});

Output example and usage

// Contents of the generated templates file (default ES6 format)
export default {"my/template": "<h1>hello {{name}}</h1>"};

// In your module.js
import Mustache from 'mustache';
import templates from './templates';

const tpl = templates['my/template'];

Mustache.render(tpl, {name: 'World'});

License

MIT © VI Company

Releases

No releases published

Packages

No packages published