# grunt-contrib-watch [![Build Status](https://secure.travis-ci.org/gruntjs/grunt-contrib-watch.png?branch=master)](http://travis-ci.org/gruntjs/grunt-contrib-watch) > Run predefined tasks whenever watched file patterns are added, changed or deleted. _Note that this plugin has not yet been released, and only works with the latest bleeding-edge, in-development version of grunt. See the [When will I be able to use in-development feature 'X'?](https://github.com/gruntjs/grunt/blob/devel/docs/faq.md#when-will-i-be-able-to-use-in-development-feature-x) FAQ entry for more information._ ## 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][Getting Started] and [package.json][], install this plugin with the following command: ```bash npm install grunt-contrib-watch --save-dev ``` Once that's done, add this line to your project's Gruntfile: ```js grunt.loadNpmTasks('grunt-contrib-watch'); ``` 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. [grunt]: http://gruntjs.com/ [Getting Started]: https://github.com/gruntjs/grunt/blob/devel/docs/getting_started.md [package.json]: https://npmjs.org/doc/json.html ## The watch task ### Overview Inside your `Gruntfile.js` file, add a section named `watch`. This section specifies the files to watch, tasks to run when an event occurs and the options used. ### Settings There are a number of options available. Please review the [minimatch options here](https://github.com/isaacs/minimatch#options). As well as some additional options as follows: #### tasks Type: `String|Array` This defines which tasks to run when a watched file event occurs. #### options.interrupt Type: `boolean` Default: false As files are modified this watch task will spawn tasks in child processes. The default behavior will only spawn a new child process per target when the previous process has finished. Set the `interrupt` option to true to terminate the previous process and spawn a new one upon later changes. Example: ```js watch: { scripts: { files: '**/*.js', tasks: ['jshint'], options: { interrupt: true } } } ``` #### options.debounceDelay Type: `Integer` Default: 500 How long to wait before emitting events in succession for the same filepath and status. For example if your `Gruntfile.js` file was `changed`, a `changed` event will only fire again after the given milliseconds. Example: ```js watch: { scripts: { files: '**/*.js', tasks: ['jshint'], options: { debounceDelay: 250 } } } ``` #### options.interval Type: `Integer` Default: 100 The `interval` is passed to `fs.watchFile`. Since `interval` is only used by `fs.watchFile` and this watcher also uses `fs.watch`; it is recommended to ignore this option. *Default is 100ms*. ### Examples ```js // Simple config to run jshint any time a file is added, changed or deleted grunt.initConfig({ watch: { files: '**/*', tasks: ['jshint'] } }); ``` ```js // Advanced config. Run specific tasks when specific files are added, changed or deleted. grunt.initConfig({ watch: { gruntfile: { files: 'Gruntfile.js', tasks: ['jshint:gruntfile'], options: { nocase: true } }, src: { files: ['lib/*.js', 'css/**/*.scss', '!lib/dontwatch.js'], tasks: ['default'] }, test: { files: '<%= jshint.test.src %>', tasks: ['jshint:test', 'qunit'] } } }); ``` ## Release History * 2012-10-07 - v0.1.0 - Release watch task Remove spawn from helper Run on Grunt v0.4 * 2012-10-15 - v0.1.1 - Fallback to global grunt bin if local doesnt exist. Fatal if bin cannot be found Update to gaze 0.1.6 * 2012-10-16 - v0.1.2 - Only spawn a process per task one at a time Add interrupt option to cancel previous spawned process Grunt v0.3 compatibility changes -- Task submitted by Kyle Robinson Young. *Generated on Thu Oct 18 2012 17:23:15.*