grunt-batch

0.2.4 • Public • Published

grunt-batch

Easy way to run a shell command for each file.

npm downloads
npm version
npm license
travis build
gemnasium

Getting Started

This plugin requires Grunt ~0.4

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-batch --save-dev

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

grunt.loadNpmTasks('grunt-batch');

The "batch" task

Overview

In your project's Gruntfile, add a section named batch to the data object passed into grunt.initConfig().

grunt.initConfig({
  batch: {
    options: {
      cmd: function (f) {
        return 'cat ' + f.src.join(' ') + ' > ' + f.dest;
      },
      setup: function (done) {
        grunt.file.mkdir('tmp');
        done();
      }
    },
    your_target: {
      // Target-specific file lists and/or options go here.
    },
  },
});

Options

options.cmd

Type: function Default value: undefined

A function returning the command string to execute. It's executed for each file.

Example:
cmd: function (files) {
  return 'cat ' + files.src.join(' ') + ' > ' + files.dest;
},

Will join all files in src to dest, using the system command cat.

files is a grunt files object:

{ src: ['source1', 'source2', 'source3'], dest: 'destination' }

The files object is generated by grunt, see the grunt documentation.

options.setup

Type: function Default value: function (callback) { callback(); }

A function that will be executed once at the startup.

options.limit

Type: number Default value: 1

The maximum number of tasks to run at any time.

Usage Examples

This example uses convert (ImageMagick) to resize images. Tasks are run in parallel, maximum 4 at any time.

The first target is images_preview, images are resized and transparences are replaced with white background, converted from png to jpeg.

The second target is images_large, images are resized, destination format is still png.

grunt.initConfig({
  batch: {
    options: {
      limit: 4
    },
    images_preview: {
      options: {
        cmd: function (f) {
          return 'convert ' + f.src[0] + ' -background "#ffffff" -flatten -resize 200x ' + f.dest;
        },
      },
      files: [{
        expand: true,
        cwd: 'src/assets/images',
        dest: 'dest/assets/images',
        src: ['*.png'],
        ext: '.preview.jpg',
      }],
    },
    images_large: {
      options: {
        cmd: function (f) {
          return 'convert ' + f.src[0] + ' -resize 800x ' + f.dest;
        },
      },
      files: [{
        expand: true,
        cwd: 'src/assets/images',
        dest: 'dest/assets/images',
        src: ['*.png'],
      }],
    },
  },
});

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

(Nothing yet)

/grunt-batch/

    Package Sidebar

    Install

    npm i grunt-batch

    Weekly Downloads

    11

    Version

    0.2.4

    License

    MIT

    Last publish

    Collaborators

    • pezzzz