In learning how to use grunt, I am trying to make a simple coffee-script watcher/compiler. The problem is, if I tell the watch
task to watch several files, and one changes, it is going to pass all of the files to the coffee
command. This means when you change 1 file, it's going to recompile all of the files matching the src
pattern. Instead, I want to only recompile the single file that changed that matches the src
pattern.
Here is the grunt.js
:
module.exports = function(grunt) {
grunt.initConfig({
coffee: {
app: {
src: ['test/cases/controller/*.coffee'],
dest: 'tmp',
options: {
bare: true,
preserve_dirs: true
}
}
},
watch: {
files: ['<config:coffee.app.src>'],
tasks: ['coffee:app']
}
});
grunt.loadNpmTasks('grunt-coffee');
grunt.registerTask('default', 'coffee');
};
This is using grunt-coffee, which is basically this: https://gist.github.com/2373159.
When I run grunt watch
, and I save a file in test/cases/controller/*.coffee
, it compiles all of the matching files (putting them in tmp/*
).
How do you instead only compile the changed file using grunt?
The upcoming (and currently in-development) v0.4.0a grunt has the grunt.file.watchFiles object, which was designed expressly for this purpose. The grunt-coffee plugin may have added support for this feature already, I'm not sure.
Either way, if you're interested in trying an in-development version of grunt in your project, check out the When will I be able to use in-development feature 'X'? FAQ entry.