2016-03-21 52 views
0

我是吞嚥瀏覽器同步,與下面的設置。問題在於,當代碼更改時,瀏覽器同步會識別並刷新頁面。但是,它不會等待腳本文件在gulp.dest中,因此通常它會自動刷新並且腳本文件無法找到,然後再次刷新,它就在那裏。瀏覽器同步與吞嚥之前刷新完成

有沒有辦法確保它會等待任務完全完成?

var browserSync = require('browser-sync').create(); 

gulp.task('cleanScripts', function() { 
    return gulp.src('./assets/js', {read: false}) 
      .pipe(clean()); 
}); 

gulp.task('scripts', ['cleanScripts'], function() { 
    return browserify('./client/js/main.js') 
     .bundle() 
     .on('error', function (e) { 
      gutil.log(e); 
     }) 
     .pipe(source('main-' + packageJson.version + '.js')) 
     .pipe(buffer()) 
     .pipe(uglify()) 
     .pipe(gulp.dest('./assets/js')); 
}); 

//Watch our changes 
gulp.task('watch', function() { 
    browserSync.init({ 
    proxy: "localhost:3000" 
    }); 
    gulp.watch(['./client/js/**/*.js', ['scripts']).on('change', browserSync.reload); 
}); 

回答

1

你可以也許嘗試簡單的方式,否則你將需要也許超時:

gulp.task('watch', function() { 
watch(['./client/js/**/*.js'], function() { 
    gulp.start('scripts'); 
}); 
}); 

並把browserSync.reload在腳本管道末端:

.pipe(browserSync.reload); 

如果不工作,嘗試超時並玩時間,但如果您確實需要快速開發和編譯,這不是一個合適的解決方案:

gulp.task('watch', function() { 
watch(['./client/js/**/*.js'], function() { 
    gulp.start('scripts'); 
    setTimeout(function(){ 
    browserSync.reload; 
    }, 1000); //1 second 
}); 
}); 

在這種情況下,您不需要在腳本管道末尾重新加載。

0

BrowserSync有權選擇reloadDelay可以在gulpfile.js設置

時間,以毫秒爲單位,指示瀏覽器重新加載之前等待/注以下文件更改事件

gulp.task('browserSync', function() { 
    browserSync.init({ 
     server: { 
      baseDir: 'app' 
     }, 
     reloadDelay: 100 
    }); 
});