grunt-mustache-combine

Combine Mustache templates.

Usage no npm install needed!

<script type="module">
  import gruntMustacheCombine from 'https://cdn.skypack.dev/grunt-mustache-combine';
</script>

README

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