Browse Source

feat(grunt watch): optimized grunt watch, now only operates on changed files

Torkel Ödegaard 10 years ago
parent
commit
e194461420
2 changed files with 39 additions and 29 deletions
  1. 2 1
      tasks/options/clean.js
  2. 37 28
      tasks/options/watch.js

+ 2 - 1
tasks/options/clean.js

@@ -4,6 +4,7 @@ module.exports = function(config) {
   return {
     release: ['<%= destDir %>', '<%= tempDir %>', '<%= genDir %>'],
     gen: ['<%= genDir %>'],
-    temp: ['<%= tempDir %>']
+    temp: ['<%= tempDir %>'],
+    css: ['<%= genDir %>/css']
   };
 };

+ 37 - 28
tasks/options/watch.js

@@ -1,39 +1,48 @@
-module.exports = function(config) {
+module.exports = function(config, grunt) {
   'use strict';
 
-  return {
-    // css: {
-    //   files: [ '<%= srcDir %>/less#<{(||)}>#*.less' ],
-    //   tasks: ['css'],
-    //   options: {
-    //     spawn: false
-    //   }
-    // },
+  grunt.event.on('watch', function(action, filepath) {
+    var newPath;
+
+    grunt.log.writeln('File Changed: ' + filepath);
+
+    if (/(\.html)$/.test(filepath)) {
+      newPath = filepath.replace(/^public/, 'public_gen');
+      grunt.log.writeln('Copying to ' + newPath);
+      grunt.file.copy(filepath, newPath);
+    }
+
+    if (/(\.js)$/.test(filepath)) {
+      newPath = filepath.replace(/^public/, 'public_gen');
+      grunt.log.writeln('Copying to ' + newPath);
+      grunt.file.copy(filepath, newPath);
+
+      grunt.task.run('jshint');
+      grunt.task.run('jscs');
+    }
 
+    if (/(\.less)$/.test(filepath)) {
+      grunt.task.run('clean:css');
+      grunt.task.run('css');
+    }
+
+    if (/(\.ts)$/.test(filepath)) {
+      //changes changed file source to that of the changed file
+      var option = 'typescript.build.src';
+      var result = filepath;
+      grunt.config(option, result);
+      grunt.task.run('typescript:build');
+      grunt.task.run('tslint');
+    }
+  });
+
+  return {
     copy_to_gen: {
       files: ['<%= srcDir %>/**/*'],
-      tasks: [
-        'clean:gen',
-        'copy:public_to_gen',
-        'css',
-        'typescript:build',
-        'jshint',
-        'jscs',
-        'tslint',
-        'karma:test'
-      ],
+      tasks: [],
       options: {
         spawn: false
       }
     },
-
-    // typescript: {
-    //   files: ['<%= srcDir %>/app#<{(||)}>#*.ts', '<%= srcDir %>/test#<{(||)}>#*.ts'],
-    //   tasks: ['tslint', 'typescript:build'],
-    //   options: {
-    //     spawn: false
-    //   }
-    // }
-
   };
 };