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 № 1Je 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);
});