/ / Gulp src renvoie un fichier vide - gulp, gulp-watch

Gulp src retourne un fichier vide - gulp, gulp-watch

J'essaie de créer une tâche Gulp pour la compilation sass / js et j'ai également inclus du code pour le rechargement en direct. Cela fonctionne bien, sauf que parfois gulp.src jette des fichiers vides dans le tuyau lorsque je les édite.

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: "./" })

Lorsque les fichiers sont enregistrés, le débogage vérifie la gulp.src sortie et la plupart du temps, il affiche des fichiers avec le contenu approprié, mais de temps en temps, ces fichiers sont vides.

        .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 () {

});

Je ne sais pas comment résoudre ce problème. Quand j’exécute gulp, cela fonctionne toujours au début, mais plus tard quand gulp.watch voit des changements le problème apparaît.

Il semble que les fichiers finissent par être vides lorsque je les enregistre en utilisant le paquet sftp dans Sublime Text. C'est très étrange, car économiser avec Vim à distance fonctionne toujours bien.

Réponses:

17 pour la réponse № 1

Je ne sais pas si c'est la voie à suivre, mais il semble queSFTP dans Sublime a besoin de plus de temps pour mettre à jour le fichier sur le serveur. Gulp.watch déclenche la tâche gulp même lorsque le fichier n'est pas prêt. Après avoir ajouté le processus setTimeout () au processus gulp.watch, il fonctionne à chaque fois que j’enregistre maintenant.

gulp.watch("./src/js/*.js", function() {
setTimeout(function () {
gulp.start("js");
}, 300);
});