2014-02-27 58 views
8

我正在嘗試爲sass/js編譯創建gulp任務,並且還包含了實時重新加載的代碼。它工作正常,但有時gulp.src會在編輯它們時將空文件引入管道。gulp src返回空文件

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

當文件被保存的調試正在檢查gulp.src輸出和大部分顯示了適當的內容,但不時這些文件是空文件的時間。

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

}); 

我不知道該如何解決。當我運行吞噬它始終工作最初,但後來當gulp.watch看到變化的問題出現。

當我在Sublime Text中使用sftp包保存它們時,它看起來像文件最終爲空。它非常奇怪,因爲用Vim遠程保存總是很好用。

+0

歡迎來到StackOverflow!我建議將它作爲答案發布,然後再接受你自己的答案,以便其他人可以知道如何輕鬆解決這個問題 – Llopis

回答

17

我不確定是否是要走的路,但看起來Sublime中的SFTP需要更多時間來更新服務器上的文件。即使文件沒有準備好,Gulp.watch也會觸發吞嚥任務。將setTimeout()添加到gulp.watch過程後,每當我現在保存時它都會工作。

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

這看起來並不理想,但它解決了我的問題。謝謝!我必須使用更高的數字才能始終如一地工作,但現在我必須始終等待最短的時間。 – DesignerGuy

+0

這也解決了我的問題。不過,我相信有更好的解決辦法。 – Link