2013-05-14 11 views
20

Na stronie z informacjami o wtyczce grunt-contrib-watch znajduje się przykład, jak uruchomić jshint tylko dla zmienionego pliku.Gruntjs: Jak wykonać zadanie kopiowania, aby skopiować tylko zmienione pliki na zegarku

grunt.initConfig({ 
    watch: { 
    scripts: { 
     files: ['lib/*.js'], 
     tasks: ['jshint'], 
     options: { 
     nospawn: true, 
     }, 
    }, 
    }, 
    jshint: { 
    all: ['lib/*.js'], 
    }, 
}); 

grunt.event.on('watch', function(action, filepath) { 
    grunt.config(['jshint', 'all'], filepath); 
}); 

Nie przetestowałem tego przykładu. Ale bez powodzenia wziąłem to i zastosowałem do mojego zadania kopiowania. Zadanie contru-copy zostało stworzone w celu kopiowania obrazów i szablonów do mojego projektu kątowego. I byłbym szczęśliwy wiedząc, czy mogę wykonać tę pracę dla zadania kopiowania i jeśli mogę, co robię źle.

Dziękuję bardzo.

Oto mój rozebrany Gruntfile.js.

// Build configurations. 
module.exports = function(grunt){ 

    // Project configuration. 
    grunt.initConfig({ 

     pkg: grunt.file.readJSON('package.json'), 

     // Copies directories and files from one location to another. 
     copy: { 
     // DEVELOPMENT 
     devTmpl: { 
      files: [{ 
      cwd  : 'src/tpl/', 
      src  : ['**/*'], 
      dest : 'app/tpl/', 
      flatten : false, 
      expand : true 
      }] 
     }, 
     devImg: { 
      files: [{ 
      cwd  : 'src/img/', 
      src  : ['**/*'], 
      dest : 'app/img/', 
      flatten : false, 
      expand : true 
      }] 
     } 
     }, 

     // Watch files for changes and run tasks 
     watch: { 
     // Templates, copy 
     templates: { 
      files : 'src/tpl/**/*', 
      tasks : ['copy:devTmpl'], 
      options: { 
      nospawn: true, 
      } 
     }, 
     // Images, copy 
     images: { 
      files : 'src/img/**/*', 
      tasks : ['copy:devImg'], 
      options: { 
      nospawn: true, 
      } 
     } 
     } 

    }); 

    // Watch events 
    grunt.event.on('watch', function(action, filepath) { 
     // configure copy:devTmpl to only run on changed file 
     grunt.config(['copy','devTmpl'], filepath); 
     // configure copy:devImg to only run on changed file 
     grunt.config(['copy','devImg'], filepath); 
    }); 

    // PLUGINS: 
    grunt.loadNpmTasks('grunt-contrib-copy'); 


    // TASKS: 

    /* DEV: Compiles the app with non-optimized build settings, places the build artifacts in the dist directory, and watches for file changes. 
    run: grunt dev */ 
    grunt.registerTask('dev', 'Running "DEVELOPMENT", watching files and compiling...', [ 
     'default', 
     'watch' 
    ]); 

    /* DEFAULT: Compiles the app with non-optimized build settings and places the build artifacts in the dist directory. 
    run: grunt */ 
    grunt.registerTask('default', 'Running "DEFAULT", compiling everything.', [ 
     'copy:devTmpl', 
     'copy:devImg' 
    ]); 

} 
+0

Istnieje opcja użycia nowszego zadania, jak sądzę. – GnrlBzik

Odpowiedz

5

Trzeba podkreślić grunt.config do właściwej nieruchomości w swoim config:

grunt.event.on('watch', function(action, filepath) { 
    var cfgkey = ['copy', 'devTmpl', 'files']; 
    grunt.config.set(cfgkey, grunt.config.get(cfgkey).map(function(file) { 
    file.src = filepath; 
    return file; 
    })); 
}); 
+0

Oczekiwanie ... Błąd krytyczny: Obiekt 0 nie ma metody "zamień" – GnrlBzik

+0

btw, dziękuję @ kyle-robinson-young – GnrlBzik

+0

O mój błąd, myślałem, że można ustawić config w ten sposób. Zmieniłem odpowiedź. Spróbuj zamiast tego. –

17

Korzystanie grunt-sync (https://npmjs.org/package/grunt-sync) zamiast grunt-contrib-kopii, a następnie oglądać katalogi, które mają być zsynchronizowany.

Update - oto przykład:

grunt.initConfig({ 
    sync: { 
    copy_resources_to_www: { 
     files: [ 
     { cwd: 'src', src: 'img/**', dest: 'www' }, 
     { cwd: 'src', src: 'res/**', dest: 'www' } 
     ] 
    } 
    } 
}); 

CWD oznacza bieżący katalog roboczy. copy_resources_to_www to tylko etykieta.

+0

byłoby miło, gdyby dokumenty miały coś bardziej przydatnego do czytania. grunt-sync może być fajny, ale przykłady są bardzo rozwlekłe. – lordB8r

Powiązane problemy