Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 416|回复: 0

Gulp发布版本控制解决css,js被缓存问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-5-16 14:05:40 | 显示全部楼层 |阅读模式

    每次线上发布为了防止客户端缓存css,js我们需要在引用的路径上加上添加版本号或者使用md5命名文件再修改html里的引用。那么gulp是一个不错的选择工具,配置简单。

    下面分别列出用版本号?vev=方式和md5命名文件的方式来实现

    1:md5命名文件的方式

    些功能主要用到了gulp 的 gulp-dev

    项目的目录结构如下

    package.json:

    {
      "name": "gulp rev",
      "version": "1.0.0",
      "description": "",
      "main": "main.js",
      "scripts": {
        "test": "\"a common\""
      },
      "keywords": [
        "gulp rev"
      ],
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "gulp": "^3.9.0",
        "gulp-clean": "^0.3.2",
        "gulp-concat": "^2.6.0",
        "gulp-jshint": "^2.0.0",
        "gulp-less": "^3.0.5",
        "gulp-minify-css": "^1.2.1",
        "gulp-rename": "^1.2.2",
        "gulp-rev": "^6.0.1",
        "gulp-rev-collector": "^1.0.2",
        "gulp-uglify": "^1.5.4",
        "jshint": "^2.8.0"
      }
    }

    login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/login.css">
    </head>
    <body>
        <script type="text/javascript" src="js/zepto.js"></script>
        <script type="text/javascript" src="js/base.js"></script>
        <script type="text/javascript" src="js/common.js"></script>
        <script type="text/javascript" src="js/login.js"></script>
    </body>
    </html>

    Gulpfile.js

    var gulp=require('gulp'),
        concat=require('gulp-concat'),//文件合并
        uglify=require('gulp-uglify'),//js压缩
        minifyCss=require('gulp-minify-css'),//css压缩
        rev=require('gulp-rev'),//对文件名加MD5后缀
        clean=require('gulp-clean'),//清理
        revCollector=require('gulp-rev-collector');//路径替换
    
    //css处理任务
    gulp.task('mini-css',function(){
       gulp.src(['./src/css/*.css'])
           .pipe(minifyCss())
           .pipe(rev())
           .pipe(gulp.dest('./dist/css'))
           .pipe(rev.manifest())
           .pipe(gulp.dest('./rev/css'));
    });
    //js处理任务
    gulp.task('mini-js',function(){
        gulp.src(['./src/js/*.js'])
            .pipe(uglify({
                //mangle: true,//类型:Boolean 默认:true 是否修改变量名
                mangle: false
            }))
            .pipe(rev())
            .pipe(gulp.dest('./dist/js'))
            .pipe(rev.manifest())
            .pipe(gulp.dest('./rev/js'));
    });
    //路径替换任务
    gulp.task('rev',function(){
        gulp.src(['./rev/*/*json','./src/*.html'])
            .pipe(revCollector())
            .pipe(gulp.dest('./dist'));
    });
    //清理文件
    gulp.task('clean', function() {
        gulp.src(['./dist'], {read: false})
            .pipe(clean());
    });
    //图片处理,
    gulp.task('images', function() {
        return gulp.src('src/img/**/*')
            .pipe(gulp.dest('./dist/img'));
    });
    gulp.task('default',['clean','mini-css','mini-js','images','rev']);

     

    在 cmd cd到项目路径 运行 gulp

    生成如下 

    在微信端推荐使用这种方法来解决的缓存问题,

    2:使用版本号参数的方式实现

    基于以上的方式安装 gulp-rev-append

    npm install --save-dev gulp-rev-append

    Gulppfile.js

    var gulp=require('gulp'),
        concat=require('gulp-concat'),//文件合并
        uglify=require('gulp-uglify'),//js压缩
        minifyCss=require('gulp-minify-css'),//css压缩
        rev  = require('gulp-rev-append'); // 给URL自动加上版本号
        clean=require('gulp-clean');//清理
    
    //css处理任务
    gulp.task('mini-css',function(){
       gulp.src(['./src/css/*.css'])
           .pipe(minifyCss())
           .pipe(gulp.dest('./dist/css'));
    });
    //js处理任务
    gulp.task('mini-js',function(){
        gulp.src(['./src/js/*.js'])
            .pipe(uglify({
                //mangle: true,//类型:Boolean 默认:true 是否修改变量名
                mangle: false
            }))
            .pipe(gulp.dest('./dist/js'));
    });
    //路径替换任务
    gulp.task('rev',function(){
        gulp.src('./src/*.html')
            .pipe(rev())
            .pipe(gulp.dest('./dist'));
    });
    //清理文件
    gulp.task('clean', function() {
        gulp.src(['./dist'], {read: false})
            .pipe(clean());
    });
    //图片处理,
    gulp.task('images', function() {
        return gulp.src('src/img/**/*')
            .pipe(gulp.dest('./dist/img'));
    });
    gulp.task('default',['clean','mini-css','mini-js','images','rev']);

    login.html  在引用的每个地方加上?rev=@@hash

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/login.css?rev=@@hash">
    </head>
    <body>
        <script type="text/javascript" src="js/zepto.js?rev=@@hash"></script>
        <script type="text/javascript" src="js/base.js?rev=@@hash"></script>
        <script type="text/javascript" src="js/common.js?rev=@@hash"></script>
        <script type="text/javascript" src="js/login.js?rev=@@hash"></script>
    </body>
    </html>

     

    运行 gulp 效果如下 

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/login.css?rev=9371fb250d95c0b97dae694811fb81ad">
    </head>
    <body>
        <script type="text/javascript" src="js/zepto.js?rev=a564a61d87513e0ae4bd27b4644dd4c5"></script>
        <script type="text/javascript" src="js/base.js?rev=162299d57d54a5db3ef411beac8fdeb6"></script>
        <script type="text/javascript" src="js/common.js?rev=267b973166c9d7134e51740736329eb5"></script>
        <script type="text/javascript" src="js/login.js?rev=2997ebed8ed282ef5c1b3a653b9cf1d7"></script>
    </body>
    </html>

    ok!完成。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-23 15:00 , Processed in 0.058891 second(s), 28 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表