做了好多项目,这次终于要解决微信浏览器缓存这个令人头疼的问题了。每次上传新的文件,在微信浏览器中访问时,总要先清除微信的缓存,实在麻烦,在网上搜罗了很多解决办法,终于找到了方法:利用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 文件

所有配置代码如下:

 var gulp = require('gulp'),
concat = require('gulp-concat'),//- 多个文件合并为一个;
minifyCss = require('gulp-minify-css'),//- 压缩CSS为一行;
jshint = require('gulp-jshint'),
uglify = require('gulp-uglify'),
rev = require('gulp-rev'),//- 对文件名加MD5后缀
revCollector = require('gulp-rev-collector'),//- 路径替换
clean = require('gulp-clean');//- 清空文件夹,避免资源冗余 //清空文件夹,避免资源冗余css
gulp.task('cleancss',function(){
return gulp.src('css',{read:false}).pipe(clean());
}); //清空文件夹,避免资源冗余js
gulp.task('cleanjs',function(){
return gulp.src('js',{read:false}).pipe(clean());
}); gulp.task('css', ['cleancss'], function() {//- 创建一个名为 concat 的 task
gulp.src(['./src/css/*.css']) //- 需要处理的css文件,放到一个字符串数组里
//.pipe(concat('wrap.min.css')) //- 合并后的文件名
.pipe(minifyCss())//- 压缩处理成一行
.pipe(rev())//- 文件名加MD5后缀
.pipe(gulp.dest('./css'))//- 输出文件本地
.pipe(rev.manifest())//- 生成一个rev-manifest.json
.pipe(gulp.dest('./rev/css'));//- 将 rev-manifest.json 保存到 rev 目录内
}); gulp.task('js', ['cleanjs'], function() {//- 创建一个名为 concat 的 task
gulp.src(['./src/js/*.js']) //- 需要处理的js文件,放到一个字符串数组里
//.pipe(concat('wrap.min.js')) //- 合并后的文件名
.pipe(jshint())//- 压缩处理成一行
.pipe(uglify())
.pipe(rev())//- 文件名加MD5后缀
.pipe(gulp.dest('./js'))//- 输出文件本地
.pipe(rev.manifest())//- 生成一个rev-manifest.json
.pipe(gulp.dest('./rev/js'));//- 将 rev-manifest.json 保存到 rev 目录内
}); gulp.task('rev', function() {
gulp.src(['./rev/**/*.json', './src/*.html'])//- 读取 rev-manifest.json 文件以及需要进行css名替换的文件。通过hash来精确定位到html模板中需要更改的部分,然后将修改成功的文件生成到指定目录
.pipe(revCollector())//- 执行文件内css名的替换
.pipe(gulp.dest('./'));//- 替换后的文件输出的目录
}); 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还有很多新的玩儿法,大家可以自行去百度。

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

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

  1. 解决微信浏览器缓存站点入口文件(IIS部署Vue项目)

    最近开发的微信公众号项目中(项目采用Vue + Vux 构建,站点部署在IIS8.5上),遇到个非常奇葩的问题,发布站点内容后,通过微信打开网址发现是空白页面(后来验证是微信浏览器缓存了入口文件-in ...

  2. 解决IE浏览器缓存导致AJAX请求数据异常

    IE10浏览器会把AJAX请求的数据都缓存下来,然后每次想去刷新数据时发现数据都是一样的,于是导致数据显示异常. 解决方法: 在页面<head>标签里,加上以下声明: <!-- 解决 ...

  3. 解决微信浏览器video全屏的问题

    解决微信浏览器video全屏的问题 在微信浏览器里面使用video标签,会自动变成全屏,改成下面就好了,起码可以在video标签之上加入其他元素. <video id="videoID ...

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

    场景是这样子的,页面在初始化时有一个ajax请求,在页面上有一个按钮,点击的时候执行window.location.reload(),正常情况reload()后页面依然会向后台发出请求,但在安卓的微信 ...

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

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

  6. 解决微信浏览器中无法一键拨号问题tel

    公众号中需要在某些页面显示手机号码,并且需要点击后拨号. 原以为 <a href="tel:10086">10086</a> 可以解决了, 没想到在微信浏览 ...

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

    在我们进行前后端完全分离的时候,有一个问题一直是挺头疼的,那就是公共header和footer的引入.在传统利用后端渲染的情况下,我们可以把header.footer写成两个单独的模板,然后用后端语言 ...

  8. 怎样获取最新版的javascript文件,解决被浏览器缓存的问题

    假设有一个js文件(以jquery为例),在服务器上的URL地址为:../js/jquery.js . 当某天jquery版本更新了,用最新版的jquery文件覆盖了原来旧版的jquery文件. 这时 ...

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

    方法:微信页面通过safari浏览器打开 safari打开的时候进行跳转 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...

随机推荐

  1. c++ 静态成员变量

    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...

  2. 【转】struts2.5框架使用通配符指定方法(常见错误)

    在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace="/" extends=&quo ...

  3. c++ list reverse_iterator

    #pragma warning(disable:4786) #include <set> #include <iostream> using namespace std ; t ...

  4. 调用外部 DLL 中的函数(2. 晚绑定)

    , b, t, );end; procedure TForm1.FormDestroy(Sender: TObject);begin  FreeLibrary(inst);  {记得释放}end; e ...

  5. 第四章 Spring.Net 如何管理您的类___自定义对象行为

    Spring.Net 一直讲求 ” 配置应用程序“,有一种需求在实际开发中不太常用,却非常有用 -> 配置对象的行为,Spring.Net 也能够完美的实现.Spring.Net 通过几个专门的 ...

  6. Cocos2d-x 3.0final 终结者系列教程10-画图节点Node中的Action

    Action是作用在Node上的逻辑处理,比方让Node移动.旋转.缩放.变色.跳跃.翻转.透明等等.都有相相应的Action Action怎样在Node上使用 1. 定义Action对象 如 aut ...

  7. JavaScript------生成Guid方法

    转载: http://blog.csdn.net/limm33/article/details/51536529 代码: function newGuid() { var guid = "& ...

  8. mybatis由浅入深day01_ 4.11总结(parameterType_resultType_#{}和${}_selectOne和selectList_mybatis和hibernate本质区别和应用场景)

     4.11 总结 4.11.1 parameterType 在映射文件中通过parameterType指定输入参数的类型.mybatis通过ognl从输入对象中获取参数值拼接在sql中. 4.11.2 ...

  9. python2.0_s12_day15_django框架的基本使用

    day15本节内容介绍 上节作业讲解(让行进入编辑模式,批量编辑) CSS之特殊内容补充 CSS内容补充之伪类 伪类实例:返回顶部终极版 CSS内容补充之无法被覆盖 jQuery插件 jQuery插件 ...

  10. angularjs基础——控制器

    1)当使用非空ng-app和ng-controller时,变量由angularjs控制器来处理 2)控制器接管模型变量后,直接修改模型,模版里的变量还是会自动变的 <!DOCTYPE html& ...