Skip to content

Instantly share code, notes, and snippets.

@AdamPflug
Created May 29, 2012 20:47
Show Gist options
  • Save AdamPflug/2830614 to your computer and use it in GitHub Desktop.
Save AdamPflug/2830614 to your computer and use it in GitHub Desktop.
Jake task to continously monitor the javascript and less files for the project, and rebuild them as necessary
desc('Continously monitors the javascript and less files for the project, and rebuilds them as necessary');
task('watch', ['build'], function () {
// Recursively watch files with a callback
var fs = require('fs');
var files = [];
var findFilesAndWatch = function (path) {
fs.stat(path, function (err, stats) {
if (err) {
return false;
}
if (stats.isFile()) {
files.push(path);
fs.watchFile(path, changeCallbackFactory(path));
}
else if (stats.isDirectory()) {
fs.readdir(path, function (err, dirListing) {
if (err) {
return log.fatal(err);
}
for (var f in dirListing) {
findFilesAndWatch(path + '/' + dirListing[f]);
}
});
}
});
};
var changeCallbackFactory = function (file) {
return function (cur, prev) {
if (cur.mtime > prev.mtime) {
stopWatch();
var fileTask = jake.Task[file];
if (fileTask) {
fileTask.modTime = cur.mtime;
}
jake.Task['build'].reenable(true);
jake.Task['build'].invoke();
startWatch();
}
};
};
var startWatch = function () {
for (var i = 0; i < files.length; i++) {
fs.watchFile(files[i], changeCallbackFactory(files[i]));
}
};
var stopWatch = function () {
for (var i = 0; i < files.length; i++) {
fs.unwatchFile(files[i]);
}
};
findFilesAndWatch('themes');
}, {async: true});
@AdamPflug
Copy link
Author

AdamPflug commented Jun 11, 2012 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment