grunt-dustjs

Grunt task to compile Dust.js templates.

npm install grunt-dustjs
89 downloads in the last day
990 downloads in the last week
5 284 downloads in the last month

grunt-dustjs

Grunt task to compile Dust.js templates.

Getting Started

Install this grunt plugin next to your project's grunt.js gruntfile with: npm install grunt-dustjs.

Then add this line to your project's grunt.js gruntfile:

grunt.loadNpmTasks("grunt-dustjs");

Documentation

Inside your grunt.js file, add a section named dustjs with one or more targets. Each section contains a files object that specifies the Dust.js template files to compile.

files object

This defines what files this task will process. It can contain any valid Grunt files format.

When using a src/dest format, the key (destination) should be an unique filepath (supports grunt.template) and the value (source) should be a filepath or an array of filepaths (supports minimatch). All source files will be combined into the destination output.

When using the dynamic format (example #3), each source file will be processed into its own destination file.

Options

fullname default: false

Used to customize the template variable names. If fullname is true, the full path will be used as the template name. If fullname is a function, the function receives a single argument, which is the full path, and returns the name of the template.

transformQuote default: false

Used to reverse quotes usage by dustjs: double quotes replaced by single quotes and vice versa. Output is more clean after this transformation.

Example #1

module.exports = function (grunt) {
  //...
  grunt.loadNpmTasks("grunt-dustjs");
  //...

  var config = {
    //...
    dustjs: {},
    //...
  };

  config.dustjs: {
    compile: {
      files: {
        "js/templates.js": ["src/templates/**/*.html"]
      }
    }
  },
});

Example #2 (custom template names)

var path = require("path");

module.exports = function (grunt) {
  //...
  grunt.loadNpmTasks("grunt-dustjs");
  //...

  var config = {
    //...
    dustjs: {},
    //...
  };

  config.dustjs: {
    compile: {
      files: {
        "js/templates.js": ["src/templates/**/*.html"]
      },
      options: {
        fullname: function(filepath) {
          var key = path.relative("src/templates", path.dirname(filepath)).split(path.sep) // folder names
            .concat([path.basename(filepath, path.extname(filepath))]) // template name
            .join(".");

          if (key.charAt(0) == ".")
            return key.substr(1, key.length - 1);
          return key;
        }
      }
    }
  },
});

Example #3 (one JS file per template)

module.exports = function (grunt) {
  //...
  grunt.loadNpmTasks("grunt-dustjs");
  //...

  var config = {
    //...
    dustjs: {},
    //...
  };

  config.dustjs: {
    compile: {
      files: [
        {
          expand: true,
          cwd: "dust/",
          src: "**/*.html",
          dest: "",
          ext: ".js"
        }
      ]
    }
  }
});

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using grunt.

Release History

  • 07/02/2014 - 1.2.1: Update jshint
  • 14/01/2014 - 1.2.0: Add append/prepend wrapper strings (@kreegr), error handling (@sunflowerdeath)
  • 23/07/2013 - 1.1.0: Introduce transformQuote option.
  • 23/07/2013 - 1.0.1: Correct expand function.
  • 18/07/2013 - 1.0.0: Release.
  • 18/07/2013 - 0.2.4: Update examples.
  • 19/01/2013 - 0.2.2: Grunt v0.4rc5 compatibility (@toddself).
  • 14/12/2012 - 0.2.1: Grunt v0.4 compatibility (@SpeCT).
  • 08/12/2012 - 0.2.0: Add namespace support (@bernharduw).
  • 25/09/2012 - 0.1.2: Initial release.

License

Copyright (c) 2013-2014 Stanislav Lesnikov Licensed under the MIT license.

npm loves you