grunt-horde

Packageable, composable grunt configuration modules

grunt-horde

Packageable, composable grunt configuration modules

  • Use Gruntfile.js to define the composition at a high-level.
  • Reuse common configuration by storing them as modules.
  • Customize the merged configuration with a composition API.
  • More easily maintain sections like initConfig, loadNpmTasks, and registerTask in individual files.
  • Access convenient aliases for template expansion, object merging, and semver.
  • Load configurations from regular directories or local NPM modules.

Define the composition at a high-level: the modules to merge, in what order, and final customization.

module.exports = function(grunt) {
  var horde = require('grunt-horde').create(grunt);
  horde
    .loot('my-base-config')
    .loot('./config/grunt')
    .demand('initConfig.eslint.options', {envs: ['node', 'es6']})
    .attack();
};

Loaded first, this module provides a baseline.

initConfig/
    index.js
    eslint.js
    shell.js
tasks/
    precommit.js
loadNpmTasks.js
loadTasks.js
registerTask.js
registerMultiTask.js
// initConfig/eslint.js 
module.exports = function() {
  return {
    src: {
      files: {
        src: ['index.js', 'lib/**/*.js']
      }
    }
  };
};

Defines project-specific configs that are merged recursively with ./node_modules/my-base-config.

initConfig/
    eslint.js
loadNpmTasks.js
registerTask.js
// initConfig/eslint.js 
module.exports = function() {
  return {
    src: {
      files: {
        test: ['test/**/*.js']
      }
    }
  };
};

Now initConfig.eslint contains both src (from ./node_modules/my-base-config) and test (from ./config/grunt).

NPM

npm install grunt-horde

MIT

npm test