使用browserSync时如何处理浏览器缓存?

Rom*_*kin 11 browser-cache gulp browser-sync

我正在使用带有下一个配置的browserSync gulp(简化):

gulp.task('serve', ['compile_styles'], function() {
    browserSync.init({
        proxy: 'my-local-dev.site'
    });

    gulp.watch('/public/styles/**/*.scss', ['compile_styles']);
    gulp.watch('/public/js/**/*.js').on('change', browserSync.reload);
    gulp.watch('/**/*.php').on('change', browserSync.reload);
});
Run Code Online (Sandbox Code Playgroud)

SCSS更改被推送到.pipe(browserSync.reload({stream: true}))内部compile_styles任务,但正如您所看到的.js文件我使用简单browserSync.reload而且它无法正常工作因为浏览器(chrome 57.0.2987.133(64位))从其内部缓存加载静态文件所以我需要进行额外的重新加载刷新该缓存并强制浏览器再次加载该文件.

同样的事情可能与任何静态资源有关,如图像,字体等.那么如何在使用browserSync时处理浏览器缓存?

小智 5

在chrome devtools(CTRL MAJ I)的“ 网络”标签中,您有一个“ 禁用缓存”复选框。它应该工作。

  • 据我所知,该设置仅在打开devtools时有效,因此不能完全解决问题。 (4认同)

abd*_*uni 5

你为什么不使用gulp-cache

var cache = require('gulp-cache');   

gulp.task('clearCache', function() {

  // Still pass the files to clear cache for
  gulp.src('./lib/*.js')
  .pipe(cache.clear());

  // Or, just call this for everything
  cache.clearAll();

});
Run Code Online (Sandbox Code Playgroud)

然后将此任务添加到您的观察者

  • 如果遇到像我这样的其他gulp新手:(1)我必须安装<1.0的gulp-cache版本才能使用此导入方法。(2)“将此任务添加到您的观察者”意味着观察者的第二部分是要执行的操作的列表,例如:`gulp.watch(['./**/*。{scss,css,html ,py,js}'],['clearCache',重新加载]);` (2认同)

Rom*_*kin 4

通过使用函数{stream: true}参数找到了解决方案browserSync.reload,但要使其工作,需要进行一些更改。那是怎样的:

gulp.watch('/public/js/**/*.js').on('change', browserSync.reload);
Run Code Online (Sandbox Code Playgroud)

以及它现在的样子:

gulp.watch('/public/js/**/*.js').on('change', function(e) {
    return gulp.src(e.path)
        .pipe(browserSync.reload({stream: true}));
});
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的问题和回答。我的问题还没有完全解决。注入工作正常,但当我重新加载页面或移动到另一个页面时:Chrome (57) 仍然使用旧样式表进行渲染。**硬重新加载**解决了这个问题。我还在考虑给样式表一个随机字符串/时间戳来欺骗 Chrome 实际加载该东西。 (2认同)