grunt-tailor

Allows end users to easily create custom builds of your library

grunt-tailor

Allows end users to easily create custom builds of your library

When building a modulaized library, you will need to provide a way for your end users to customize what modules to be included in their custom build. This tools give your users a easy way to customize the final build. For example: grunt tailor:+slideshow,+gallery,-event

This task is inspired by jQuery's custom build task.

This plugin requires Grunt ~0.4.1

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-tailor --save-dev

One the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-tailor');

Add the following to your grunt.js file.

grunt.initConfig({
  ...
  tailor: {
    intro; ['intro.js'],
    outro: ['outro.js'],
    essential: ['core', 'events'],
    src: {
      'core': ['core.js'],
      'events': ['events.js'],
      'slideshow': ['slideshow.js', 'slideshow-effects.js'],
      'slideshoweffects': ['slideshow-effects.js'],
      'gallery': ['gallery.js'],
      'videoplayer': ['videoplayer.js'],
      'musicplayer': ['musicplayer.js']
    },
    dest: 'dist/os.js',
    prefix: 'src/'
  }
  ...
});
// By default the essential ones are concatenated, along with the intro and outro
> grunt tailor
==> 'src/intro.js', 'src/core.js', 'src/events.js', 'src/outro.js'
 
// Add files with "+". Separate files with ","
> grunt tailor:+slideshow,+musicplayer
==> 'src/intro.js', 'src/core.js', 'src/events.js', 'src/slideshow.js', 'src/slideshow-effects.js', 'src/outro.js'
 
// Remove files with "-". "-" can remove files listed in essential
> grunt tailor:-events
==> 'src/intro.js', 'src/core.js', 'src/outro.js'
 
// What if you want `slideshow.js` but not `slideshow-effect.js`?
// You can remove a particular module, which another option has included. Exlucivity beats inclusvity...
> grunt tailor:+slideshow,-slideshoweffects
==> 'src/intro.js', 'src/core.js', 'src/events.js', 'src/slideshow.js', 'src/outro.js'
 
// ... and order doesn't matter
> grunt tailor:-slideshoweffects,+slideshow
==> 'src/intro.js', 'src/core.js', 'src/events.js', 'src/slideshow.js', 'src/outro.js'
 
// Intro and outro are *always* included

You can try it out but cloning this repo, run npm install and run the above commands (like grunt tailor:+gallery).

  • Add unit tests
  • Add support depedency management
  • Add support for option name to be listed in another option
{
  src: {
  ...
  'multimedia': ['videoplayer', 'musicplayer'],
  ...
  }
}
  • Add shorthand for single file (no need for array)
{
  src: {
  ...
  'videoplayer': 'src/events.js',
  ...
  }
}

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.

(Nothing yet)