2014-02-27 5 views
8

Ich versuche, Gulp Aufgabe für Sass/Js Compilation zu erstellen, und ich habe auch Code für Live-Reload enthalten. Es funktioniert gut, außer dass manchmal gulp.src leere Dateien in die Pipe wirft, wenn ich sie bearbeite.Gulp src gibt leere Datei zurück

var gulp = require('gulp'); 

var sass = require('gulp-sass'), 
    concat = require('gulp-concat'), 
    uglify = require('gulp-uglify'), 
    rename = require('gulp-rename'), 
    clean = require('gulp-clean'), 
    debug = require('gulp-debug'), 
    livereload = require('gulp-livereload'), 
    lr = require('tiny-lr'), 
    server = lr(), 
    spawn = require('child_process').spawn, 
    node; 


gulp.task('server', function() { 
    if (node) node.kill(); 

    node = spawn('node', ['./index.js'], {stdio: 'inherit'}); 

    node.on('close', function (code) { 
     if (code === 8) { 
      gulp.log('Error detected, waiting for changes...'); 
     } 
    }); 
}); 


gulp.task('html', function() { 
    return gulp.src('./src/*.html') 
     .pipe(gulp.dest('./build')) 
     .pipe(livereload(server)); 
}); 


gulp.task('js', function() { 
    return gulp.src(['./src/js/*.js'], { base: './' }) 

Wenn Dateien Debug prüft die gulp.src Ausgabe und die meiste Zeit es zeigt Dateien mit der richtigen Inhalte, sondern von Zeit zu Zeit diese Dateien sind leer gespeichert werden.

 .pipe(debug()) 
     .pipe(concat("all.min.js")) 
     .pipe(uglify()) 
     .pipe(gulp.dest('./build/js')) 
     .pipe(livereload(server)); 
}); 


gulp.task('scss', function() { 
    return gulp.src('./src/scss/*.scss') 
     .pipe(sass()) 
     .pipe(concat("all.css")) 
     .pipe(gulp.dest('./build/css/')) 
     .pipe(livereload(server)); 
}); 


gulp.task('listen', function(next) { 
    server.listen(35729, function(err) { 
     if (err) return console.error(err); 
     next(); 
    }); 
}); 


gulp.task('clean', function(){ 
    return gulp.src(['./build/*'], {read:false}) 
     .pipe(clean()); 
}); 


gulp.task('watch', function() { 
    gulp.watch('./src/*.html', ['html']); 
    gulp.watch('./src/scss/*.scss', ['scss']); 
    gulp.watch('./src/js/*.js', ['js']); 
    gulp.watch('./index.js', ['server']); 
}); 


gulp.task('default', ['clean', 'html', 'scss', 'js', 'listen', 'server', 'watch'], function() { 

}); 

Ich bin mir nicht sicher, wie das zu beheben ist. Wenn ich schlucke, funktioniert es immer zuerst, aber später, wenn gulp.watch Änderungen sieht, erscheint das Problem.

Es sieht so aus, als wären Dateien leer, wenn ich sie mit dem sftp-Paket in Sublime Text speichere. Es ist sehr seltsam, weil das Speichern mit Vim remote immer gut funktioniert.

+0

Willkommen bei StackOverflow! Ich würde empfehlen, es als eine Antwort zu veröffentlichen und später Ihre eigene Antwort zu akzeptieren, damit andere Leute wissen, wie man dieses Problem der Frage leicht löst – Llopis

Antwort

17

Ich bin mir nicht sicher, ob es der Weg ist, aber es scheint, dass SFTP in Sublime mehr Zeit benötigt, um die Datei auf dem Server zu aktualisieren. Gulp.watch löst die Schluckaufgabe aus, auch wenn die Datei nicht bereit ist. Nach dem Hinzufügen der setTimeout() zu gulp.watch Prozess funktioniert es jedes Mal wenn ich jetzt speichere.

+0

Das scheint nicht ideal, aber es hat mein Problem geglättet. Vielen Dank! Ich musste eine höhere Nummer verwenden, um konsistent zu arbeiten, aber jetzt muss ich immer diese minimale Zeit warten. – DesignerGuy

+0

Das hat mein Problem auch gelöst. Ich glaube jedoch, dass es eine bessere Lösung gibt. – Link