利用gulp解决微信浏览器缓存问题

做了好多项目,这次终于要解决微信浏览器缓存这个令人头疼的问题了。每次上传新的文件,在微信浏览器中访问时,总要先清除微信的缓存,实在麻烦,在网上搜罗了很多解决办法,终于找到了方法:利用gulp解决缓存问题。关于gulp大家可以去gulp官网去详细了解。

这篇文章主要参考于Gulp解决发布线上文件(CSS和JS)缓存问题Gulp.js----比Grunt更易用的前端构建工具两篇文章,在这里先谢过原作者。

本文主要记录安装gulp以及使用、解决缓存问题的过程,以便日后方便查阅。

1、安装NodeJS

使用gulp需要先搭建nodejs环境。在NodeJS官网下载NodeJS最新版本,安装路径随意,安装完之后使用命令符输入node -v查看NodeJS版本号,如果出现版本号,说明NodeJS安装成功。随NodeJS一起安装下来的还有npm包管理工具,能解决NodeJS代码部署上的很多问题。命令符输入npm -v查看npm版本号。如下图:

2、全局安装gulp

命令符输入 npm install -g gulp ,之后gulp -v查看gulp版本号,如果出现版本号则安装成功。如下图:

3、初始化package.json 文件

命令符定位到项目根目录下,命令符输入 npm init,依照提示将项目名称、项目版本号、项目说明(必填项)填写。如下图:

4、安装项目开发依赖

命令符定位到在项目根目录下,命令符输入 npm install --save-dev gulp,之后项目根目录下会生成node_modules模块插件。

5、在项目根目录下新建 gulpfile.js 文件

所有配置代码如下:

 1 var gulp = require(‘gulp‘),
 2     concat = require(‘gulp-concat‘),//- 多个文件合并为一个;
 3     minifyCss = require(‘gulp-minify-css‘),//- 压缩CSS为一行;
 4     jshint = require(‘gulp-jshint‘),
 5     uglify = require(‘gulp-uglify‘),
 6     rev = require(‘gulp-rev‘),//- 对文件名加MD5后缀
 7     revCollector = require(‘gulp-rev-collector‘),//- 路径替换
 8     clean = require(‘gulp-clean‘);//- 清空文件夹,避免资源冗余
 9
10 //清空文件夹,避免资源冗余css
11 gulp.task(‘cleancss‘,function(){
12     return gulp.src(‘css‘,{read:false}).pipe(clean());
13 });
14
15 //清空文件夹,避免资源冗余js
16 gulp.task(‘cleanjs‘,function(){
17     return gulp.src(‘js‘,{read:false}).pipe(clean());
18 });
19
20 gulp.task(‘css‘, [‘cleancss‘], function() {//- 创建一个名为 concat 的 task
21     gulp.src([‘./src/css/*.css‘]) //- 需要处理的css文件,放到一个字符串数组里
22     //.pipe(concat(‘wrap.min.css‘)) //- 合并后的文件名
23         .pipe(minifyCss())//- 压缩处理成一行
24         .pipe(rev())//- 文件名加MD5后缀
25         .pipe(gulp.dest(‘./css‘))//- 输出文件本地
26         .pipe(rev.manifest())//- 生成一个rev-manifest.json
27         .pipe(gulp.dest(‘./rev/css‘));//- 将 rev-manifest.json 保存到 rev 目录内
28 });
29
30 gulp.task(‘js‘, [‘cleanjs‘], function() {//- 创建一个名为 concat 的 task
31     gulp.src([‘./src/js/*.js‘])                 //- 需要处理的js文件,放到一个字符串数组里
32     //.pipe(concat(‘wrap.min.js‘)) //- 合并后的文件名
33         .pipe(jshint())//- 压缩处理成一行
34         .pipe(uglify())
35         .pipe(rev())//- 文件名加MD5后缀
36         .pipe(gulp.dest(‘./js‘))//- 输出文件本地
37         .pipe(rev.manifest())//- 生成一个rev-manifest.json
38         .pipe(gulp.dest(‘./rev/js‘));//- 将 rev-manifest.json 保存到 rev 目录内
39 });
40
41 gulp.task(‘rev‘, function() {
42     gulp.src([‘./rev/**/*.json‘, ‘./src/*.html‘])//- 读取 rev-manifest.json 文件以及需要进行css名替换的文件。通过hash来精确定位到html模板中需要更改的部分,然后将修改成功的文件生成到指定目录
43         .pipe(revCollector())//- 执行文件内css名的替换
44         .pipe(gulp.dest(‘./‘));//- 替换后的文件输出的目录
45 });
46
47
48 gulp.task(‘default‘, [‘css‘,‘js‘,‘rev‘]);

6、安装插件

为了确保插件安装成功,要依次执行下列命令符:

npm install --save-dev gulp-concat
npm install --save-dev gulp-minify-css
npm install --save-dev gulp-jshint
npm install --save-dev gulp-uglify
npm install --save-dev gulp-rev
npm install --save-dev gulp-rev-collector
npm install --save-dev gulp-clean

7、运行gulp
此时我的目录结构如下:

命令符执行两遍gulp任务(执行一遍没有生效,得执行两遍,目前还没找到原因),如下图:

可以看一下执行gulp任务时,依次执行的插件任务,现在再来看一下我的目录结构:

其中src内是项目的源文件,在项目根目录下生成的css、js和html文件是执行gulp任务事生成,可以看到里面的文件名已经生成了md5后缀,下面是根目录下html文件的代码:

css和js引用已经自动改为了带MD5后缀的文件名。
通过gulp自动化生成带有MD5后缀名的文件,浏览器在每次请求时就会获取新的文件,也就避免了浏览器缓存的出现。
关于gulp还有很多新的玩儿法,大家可以自行去百度。

如果对这篇文章有什么建议或意见,欢迎留言~~

时间: 2024-11-08 20:24:26

利用gulp解决微信浏览器缓存问题的相关文章

解决微信浏览器无法使用reload()刷新页面

场景是这样子的,页面在初始化时有一个ajax请求,在页面上有一个按钮,点击的时候执行window.location.reload(),正常情况reload()后页面依然会向后台发出请求,但在安卓的微信浏览器中reoad后请求的一直是第一次打开页面时请求的数据.可以理解为请求被缓存了,但没有实测,也不知道是否是缓存. 解决方法是,使用window.location.href="window.location.href+随机数" 代替 window.location.reload().切记

解决微信浏览器内video全屏问题

前端离职,让我写个视频播放页面,木办法只有我来搞了. 默认用h5的 video标签 测试时候发现微信浏览器内访问video自动全屏播放. 搜了下 webkit-playsinline="true" playsinline="true" x-webkit-airplay="true" x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-

解决微信浏览器访问手机页面:您访问的页面无手机页面,是否进一步访问电脑版?

dz论坛总是报502没办法了,发到这里备份. 这个问题困扰楼主很长时间了,具体原因因为不懂php没去研究源码,所以只能用js解决了.也就是大家常见的通过修改source\language\lang_message.php里的not_in_mobile强制刷新页面,具体修改方法是将提示信息改成 '<meta http-equiv="refresh" content="5" />' 但是这个问题在微信浏览器下是不完全好使的,在朋友圈分享以后这个标签是不自动刷

利用gulp解决前后端分离的header/footer引入问题

在我们进行前后端完全分离的时候,有一个问题一直是挺头疼的,那就是公共header和footer的引入.在传统利用后端渲染的情况下,我们可以把header.footer写成两个单独的模板,然后用后端语言的include即可在其他页面中引入.我之前在<一个简单粗暴的前后端分离方案>这篇文章中说过一种方法,就是用handlebars把header.footer模板预编译为js文件,然后在页面的头部用document.write写到页面中.这种方式的弊端也比较明显,那就是依赖一个模板引擎.在使用mvv

利用nat123解决微信公众号对接服务器必须为80端口的问题

背景:最近公司接到做一个微信公众号的项目,需要我们提前做一个demo,好做项目的整体评估:我们公司本身有个云服务器,但没有备案,所以80端口还被电信屏蔽着,就想到利用nat123做80端口的映射:(外网80端口访问服务器上非80端口的应用) 前提:存在对接微信服务器的服务,云服务器本地访问地址为:http://localhost:8080/wxtest/WechatServlet 目标:外网通过80端口访问上述地址: 一:下载nat123 1:地址:http://www.nat123.com/P

解决微信浏览器禁止链接跳转到iTunes

方法:微信页面通过safari浏览器打开 safari打开的时候进行跳转 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g

MaxJump解决微信浏览器禁止链接跳转

首先MaxJump这款工具已经帮我们解决了微信访问外部链接不能下载或者跳转的限制,解除限制并实现直接跳转和下载的功能,效果如下图:那我们要如何使用这款工具呢,这里给大家分享两种方法.1.使用MaxJump的api接口(http://api.maxapi.cn/wxcreate?url=www.maxapi.cn).使用时将url=后面的网址换成你所要推广的链接或下载地址即可.效果如图:通过api接口将我们所要推广的链接和下载地址生成了一个二维码和链接,使用MaxJump的api接口生成的这个二维

如何清除微信网页缓存

之前做过很多公众号的项目,项目写完后给客户看项目,客户一而再再而三的修改元素向左挪1px,向右挪2px.改好之后让客户看,客户说我特泽发克,你啥都没有修改,你竟然骗我!!! 这其实就是微信内置浏览器的缓存在作祟啦,那么如何清理微信内置浏览器的缓存呢? 你们是否知道 ios版微信 和 android版微信 的内置浏览器的内核是不一样的呢? android版微信内置浏览器(X5内核) 1. 在安卓版微信内打开链接   https://debugx5.qq.com 2.  拉到调试页面的最底端,勾选上

利用CommaTool工具解决微信内链接或二维码可直接用外部浏览器打开

很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接,其实这并不难,只要我们实现微信跳转功能即可. 下面给大家推荐CommaTool工具(http://www.commatool.cn/) 使用步骤 1. 用浏览器打开我们的工具地址 2. 将你的推广链接输入工具框,点击生成 3. 复制新生成的跳转链接和二维码 4. 微信内打开跳转链接或扫码识别二维码 功能效果功能实现后, 苹果用户即可在微信内直接下载app也可以跳转浏览器下载,安卓用户则自动打开手机浏览器下载a