Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A grunt task that creates/ writes to files from Javascript functions in the grunt config (useful for config files, etc)
JavaScript
branch: master

Merge pull request #8 from warpdesign/patch-1

TYPO: ADDED missing double-quotes

README.md

grunt-file-creator

A grunt task that creates/writes to files from Javascript functions in the grunt config (useful for config files, etc).

Grunt ~0.4 Required

Getting Started

If you haven't used grunt before, be sure to check out the Getting Started guide.

From the same directory as your project's Gruntfile and package.json, install this plugin with the following command:

npm install grunt-file-creator --save-dev

Once that's done, add this line to your project's Gruntfile:

grunt.loadNpmTasks('grunt-file-creator');

If the plugin has been installed correctly, running grunt --help at the command line should list the newly-installed plugin's task or tasks. In addition, the plugin should be listed in package.json as a devDependency, which ensures that it will be installed whenever the npm install command is run.

The file-creator task

Overview

This task is a multi task so any targets, files and options should be specified according to the multi task documentation.

Options

openFlags

Type: String
Default: 'w'

The flags passed to the open file method.

See the node.js fs docs for more info

Usage Examples

Write a file

In this example, running grunt file-creator:basic (or grunt file-creator because file-creator is a multi task) will write a simple string to the file basic.txt under the folder dist.

// Project configuration.
grunt.initConfig({
  "file-creator": {
    "basic": {
      "dist/basic.txt": function(fs, fd, done) {
        fs.writeSync(fd, 'some basic text');
        done();
      }
    }
  }
});

Iterating a folder and writing the contents to a file.

In this example, running grunt file-creator:folder (or grunt file-creator because file-creator is a multi task) will write the filtered contents of a folder to the file folder.txt under the folder dist.

The filtering is performed using the glob included with grunt (node-glob).

The glob operation is asynchronous. The target iteration performed by file-creator will wait until the done() method is called before moving on to the next target.

// Project configuration.
grunt.initConfig({
  "file-creator": {
    options: {
      openFlags: 'w'
    },
    "folder": {
      "dist/folder.txt": function(fs, fd, done) {
          var glob = grunt.file.glob;
          var _ = grunt.util._;
          glob('test/fixtures/sample/**/*.js', function (err, files) {
            var widgets = [];
            _.each(files, function(file) {
              widgets.push(file);
            });

            fs.writeSync(fd, '// this file is auto-generated.  DO NOT MODIFY\n');
            _.each(widgets, function(file, i) {
              fs.writeSync(fd, file + ':' + i + '\n');
            });
            done();
          });
        }
      }
    }
  }
});

Specifying filenames conditionally using grunt templates

For more information, see the grunt documentation on templates (http://gruntjs.com/api/grunt.template).

  grunt.initConfig({
    conditional: {
      file: 'conditional.txt'
    },

    "file-creator": {
      "conditional": {
        files: [
          {
            file: "tmp/" + '<%= conditional.file %>',
            method: function(fs, fd, done) {
              fs.writeSync(fd, 'filenames can be set using grunt templates');
              done();
            }
          }
        ]
      }
    }
  });

Specifying filenames on the command line using grunt options

For more information, see the grunt documentation on options (http://gruntjs.com/api/grunt.option).

Using this command line, the file can be set conditionally using options.

grunt file-creator --option-name=myfile.txt
  grunt.initConfig({
      "option": {
        files: [
          {
            file: "tmp/" + (grunt.option('option-name') || 'option.txt'),
            method: function(fs, fd, done) {
              fs.writeSync(fd, 'filenames can be set as grunt options (passed on the command line)');
              done();
            }
          }
        ]
      }
    }
  });

For fully-working examples, see the test folder.

Something went wrong with that request. Please try again.