Sono completamente nuovo per Grunt e Javascript/Coffeescript.Grunt: guarda più file, compila solo cambiato - interruzioni di fegato?
Stiamo utilizzando Grunt in un progetto piuttosto grande con centinaia di file .coffee. Poiché Grunt compila tutti i file caffè (anche se è stato modificato un solo file), la mia prima domanda era su come ottenere Grunt per compilare solo il file modificato. Utilizzo di stackoverflow Sono stato in grado di rispondere a questa domanda, grazie a tutti :)
Ma ora sembra che la soluzione implementata rompa il fegato. Quando inizio con "grunt server" e visualizzo la mia pagina nel browser, tutto sembra a posto. Quindi cambio un file .coffee e lo salvi. Il file viene compilato (ho controllato), ma il mio browser non viene mai ricaricato. Solo quando ricarico manualmente il browser viene visualizzato il nuovo codice modificato.
Quindi la domanda è: perché il fegato non funziona più?
Non so se questo è importante, ma il Gruntfile è stato creato con yeoman in una versione precedente (con grunt-regarde). Ho aggiornato il pacchetto package.json e il Gruntfile alle nuove specifiche usando grunt-contrib-watch e il buildelo livereload. Senza lo grunt.event.on
tutto funziona correttamente.
Fonti (in parte):
grunt.initConfig({
watch: {
coffee: {
files: ['<%= yeoman.app %>/coffeescripts/**/*.coffee'],
tasks: ['coffee:app'],
options: {
nospawn: true
},
},
compass: {
files: ['<%= yeoman.app %>/styles/**/*.{scss,sass}'],
tasks: ['compass']
},
templates: {
files: ['<%= yeoman.app %>/templates/**/*.tpl'],
tasks: ['handlebars']
},
livereload: {
options: {
livereload: LIVERELOAD_PORT
},
files: [
'<%= yeoman.app %>/*.html',
'<%= yeoman.tmp %>/styles/**/*.css',
'<%= yeoman.tmp %>/scripts/**/*.js',
'<%= yeoman.tmp %>/spec/**/*.js',
'<%= yeoman.app %>/img/{,*/}*.{png,jpg,jpeg,webp}',
]
}
},
coffee: {
app: {
expand: true,
cwd: '<%= yeoman.app %>/coffeescripts',
src: '**/*.coffee',
dest: '<%= yeoman.tmp %>/scripts',
ext: '.js',
options: {
runtime: 'inline',
sourceMap: true
},
}
}
}
});
grunt.event.on('watch', function(action, filepath) {
filepath = filepath.replace(grunt.config('coffee.app.cwd')+'/', '');
grunt.config('coffee.app.src', [filepath]);
});
grunt.registerTask('server', function (target) {
if (target === 'dist') {
return grunt.task.run(['build', 'open', 'connect:dist:keepalive']);
}
grunt.task.run([
'clean:server',
'coffee',
'compass:server',
'symlink:bower',
'connect:livereload',
'handlebars',
'notify:watch',
'watch'
]);
});
grugnito-contrib-orologio viene utilizzato con la versione v0.4.4
, connect-livereload con la versione 0.2.0
Quale versione di orologio stai usando? – imjared
grunt-contrib-watch viene utilizzato con la versione 'v0.4.4', connect-livereload con la versione' 0.2.0'. Ho aggiornato la mia domanda sopra con queste informazioni. Scusa ho dimenticato. – EmilioMg