gulp html 版本号,通过gulp自动构建项目静态资源的版本号

通过gulp自动构建项目前端静态资源的版本号,解决浏览器缓存导致更新不及时的问题。

问题描述

项目上线后,正常的改动升级不可避免,后端的改动还好说。服务发布完成就行了,但是前端页面因为有浏览器缓存导致js、css、图片等资源不会立即更新,这就导致项目升级后,客户端看到的可能还是旧的资源。需要手动清理浏览器缓存后再刷新才能更新到最新版本。 这就需要通过资源文件版本号来实现客户端同步的问题。

例如:

html页面中的js引用如下:

1

更改后的js引用如下:

1

这样如果浏览器发现src引用的有更改,则会重新从服务器端请求该文件,这样可以实现同步了。

如果只有一个html页面的话还好修改,但是一般现在的项目中html会有多个,js、css、图片也会有很多,所以手动管理就会变的很耗时间,这时候就需要一个自动化维护的手段来实现,现在nodejs很火,基于nodejs实现的gulp就是一个流式自动化构建工具。

原理

1、生成静态资源的文件hash码,保存到指定的文件。

2、如果文件发生变化,则文件的hash码也会跟着变化。

3、检查html文件中的js文件,如果文件的hash不变,则不替换,如果不同则替换。

实现方案

创建自动化构建的项目

1、新建项目名称buildpro

2、在buildpro文件夹下,创建node_modules文件及项目文件。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53D:\home\lehoon\develop\buildpro>npm instll module_name

npm WARN saveError ENOENT: no such file or directory, open 'D:\home\lehoon\develop\buildpro\package.json'

npm notice created a lockfile as package-lock.json. You should commit this file.

npm WARN enoent ENOENT: no such file or directory, open 'D:\home\lehoon\develop\buildpro\package.json'

npm WARN buildpro No description

npm WARN buildpro No repository field.

npm WARN buildpro No README data

npm WARN buildpro No license field.

+ module_name@1.0.0

added 43 packages in 5.119s

D:\home\lehoon\develop\buildpro>npm init

This utility will walk you through creating a package.json file.

It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields

and exactly what they do.

Use `npm install ` afterwards to install a package and

save it as a dependency in the package.json file.

Press ^C at any time to quit.

package name: (buildpro)

version: (1.0.0)

description:

entry point: (index.js)

test command:

git repository:

keywords:

author:

license: (ISC)

About to write to D:\home\lehoon\develop\buildpro\package.json:

{

"name": "buildpro",

"version": "1.0.0",

"description": "",

"main": "index.js",

"dependencies": {

"module_name": "^1.0.0"

},

"devDependencies": {},

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1"

},

"author": "",

"license": "ISC"

}

Is this ok? (yes) yes

安装gulp、配置gulp

1、安装gulp及插件

1

2

3

4npm install --save-dev gulp@3.9.1

npm install --save-dev gulp-rev@7.1.2

npm install --save-dev gulp-rev-collector@1.1.1

npm install --save-dev run-sequence@1.2.2

2、配置规则

修改node_modules\gulp_rev\index.js文件

1

2把 manifest[originalFile]= revisionedFile 修改成

manifest[originalFile]=originalFile+ '?v=' +file.revHash;

修改node_modules\gulp_rev_collector\index.js文件

1

2

3

4

5把if ( !_.isString(json[key]) ||path.basename(json[key]).replace(newRegExp( opts.revSuffix ),'' ) !== path.basename(key) ) {

修改成

if (!_.isString(json[key]) ||path.basename(json[key]).split('?')[0] !== path.basename(key)) {

通过修改regexp: newRegExp('([\/\\\\\'"])' +pattern, 'g'), 修改成 regexp: new RegExp( '([\/\\\\\'"])' + pattern + '(\\?v=\\w{10})?', 'g' ),

编写gulp任务文件

1、gulp默认找gulpfile.js执行,所以gulp的任务规则都放在项目根目录下的gulpfile.js中

2、gulp的规则文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44var gulp = require('gulp');

var runSequence = require('run-sequence');

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

var revCollector = require('gulp-rev-collector');

//要处理的项目工程目录

var programPath = 'D:/workspace/lshop';

var cssSrc=programPath + '/css/**/*.css';

var jsSrc=programPath + '/js/**/*.js';

//css文件生成hash编码,并保存到文件

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

console.log('=========' + cssSrc);

return gulp.src(cssSrc)

.pipe(rev())

.pipe(rev.manifest())

.pipe(gulp.dest('rev/css'));

});

//计算js文件的hash码并保存到文件

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

console.log('=========' + jsSrc);

return gulp.src(jsSrc)

.pipe(rev())

.pipe(rev.manifest())

.pipe(gulp.dest('rev/js'));

});

//替换html中的js版本号

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

return gulp.src(['rev/**/*.json', programPath+'/*html'])

.pipe(revCollector())

.pipe(gulp.dest(programPath));

});

gulp.task('dev', function(done){

condition = false;

runSequence(['revCss'],['revJs'], ['revHtml'], done);

});

gulp.task('default', ['dev']);

3、然后切换到控制台下运行gulp命令即可。

gulp插件解决模板和静态资源编译后相对路径定位的问题 gulp插件——解决模板和静态资源编译后相对路径定位的问题,目前可支持对html、css和js的解析 立即下载

相关推荐

R语言TCGA数据下载避坑指南:biolinks包实战中的5个常见错误与解决方案

本文详细介绍了使用R语言的TCGAbiolinks包下载TCGA数据时常见的5个错误及其解决方案,包括安装与加载问题、查询构建参数设置、下载中断处理、数据加载格式不匹配以及版本兼容性问题。通过实战案例和代码示例,帮助生物信息学研究者高效获取TCGA数据,避免常见陷阱。

weixin_30892037的博客 84

gulp自动化构建html静态资源路径版本号添加和替换

Foreword 在使用gulp自动添加版本号时稍作一点修改,欢迎指正。 开始问题 我使用的是(gulp-rev + gulp-rev-collector),但是每次自动化构建都是依赖rev生成的json文件: "style.css": "style-f048bfa0ab.css", "script.js": "scrip-5c69cf6d54.js", 复制代码 利用上面的json去修...

weixin_33935777的博客 823

Geant4 案例分析(一): B1

本文是对Geant4 B1的案例分析,其中特定的功能不做介绍,而注重于各个文件的主要功能,以及它们组织的方式。

m0_51809467的博客 1582

使用gulp实现静态资源版本号替换

静态版本号替换的由来项目中js、css文件与页面分离,如<script type='text/javascript' src="a.js"></script>遇到了浏览器缓存问题,修改了a.js后,浏览器使用的是以前缓存的a.js导致功能或者样式不能与页面匹配,只能手动添加版本号,如<script type='text/javascript' src="a.js?2017080121231"></s

wangjun5159的专栏 7218

射频工程师笔记---射频通信基础

回顾一下移动通信技术的发展,其实是互联网和通信技术的融合过程。在这个过程中,很多应用都在不断加入其中。比如计算机跟通信的融合产生了互联网、互联网跟手机的融合带来了移动互联网。手机可以看杂志、看视频、听音乐,于是又出现了内容服务产业;再后来,电视音箱等设备也能联网,于是网络跟家电又产生了融合。所以应用的出现总是在融合其他产业。在1995年,比尔·盖茨在《未来之路》一书中首次提出:在未来...

多年硬件从业经历,热爱学习,记录生活! 2万+

【IoT】 产品设计之结构设计:如何设计产品按键

1、硅胶按键功能实现有两种接触方式 1)硅胶按键按压在DOME片(锅仔片)上 通常用在手机、儿童手表手机、防水手机等防水设备上。 2)硅胶按键增加导电基,一种黑色的导电碳粒,实现回路导电 通常用在遥控器、电脑键盘、特殊设备上。 两种方式结构设计原理是一样的,按键的固定与配合间隙与行程要确保好。 2、硅胶遥控器按键的结构方式(导电基) 按键帽为大颗粒实心的,触点为黑色导电基,通过压注成型融合为一体,那么这种按键结构设计时需要注意那些呢? 最主要的是按键按压回弹的手感,由于没有DOME片实现

产品线负责人 8670

gulp 修改 html 引入,GitHub - 3113001457/gulp-version: 通过gulp在原html文件上自动化添加js、css版本号...

问题:1、当我们修改js和css文件时往往需要清除浏览器的缓存,否则有些效果就看不到更新过后的。2、通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件修改则hash号会发生变化)3、替换html中的js,css文件名,生成一个带版本号的文件名,这样加版本号的静态文件就不会存在缓存的问题了。解决:1、gulp有自动化添加版本hash的插件gulp-rev,它的效果...

weixin_35171513的博客 285

计算电磁学(三)有限差分方法

有限差分方法(FDM)是一种数值处理方法,通过将偏微分方程变换为一组代数方程,通过求解代数方程组来得到原边值问题的近似值。由于有限差分法非常简单,所以也特别的稳定高效。其中时域有限差分方法(FDTD)是电磁分析中的常用方法。在计算电磁学中,常用有限差分方法(finite difference equations)来替代微分方程。一个有限差分法通常包括三个步骤将求解域划分网格用有限差分方程逼近给定的微分方程求解在给定边界条件和初始状态下的方程常用的网格模型方阵斜方阵三角阵圆形阵。

CCC_B的博客 1639

Gulp的使用

1.npm init// 初始化项目// 局部安装gulp—--save-dev表示将gulp作为devDependencice(开发依赖)保存到package.json文件中3.gulp -v// 查看gulp版本,查看是否安装成功。

lyz1238z的博客 812

Yolo11改进:Block改进|MixDehazeNet,用于图像去雾网络的混合结构块|即插即用|附代码

https://arxiv.org/pdf/2305.17654 图像去雾是低级视觉领域中的一项典型任务。先前的研究验证了大型卷积核和注意力机制在去雾中的有效性。然而,存在两个缺点:引入大型卷积核时容易忽略图像的多尺度特性,而注意力模块的标准串联方式没有充分考虑雾分布的不均匀性。在本文中,我们提出了一种名为混合结构图像去雾网络(MixDehazeNet)的新型框架,该框架解决了上述两个问题。具体而言,它主要由两部分组成:多尺度并行大型卷积核模块和增强并行注意力模块。与单个大型卷积核相比,多尺度的并行大型卷积

m0_47867638的博客 1273

Hermes 教程 05:多 Agent 编排

本文介绍了Hermes v0.13.0中的四种多Agent协作模式:1)delegate_task快速子任务模式,适合2-3个独立并行任务;2)spawn子Agent模式,实现零成本并行多步流水线;3)tmux交互子Agent模式,支持长期自主任务;4)全新Kanban看板系统,提供持久化AI团队协作框架。各模式在隔离级别、时长、工具访问和适用场景上存在差异,其中spawn模式通过独立上下文窗口实现零上下文成本。文章详细说明了每种模式的使用方法、限制条件和典型应用场景,并提供了具体代码示例和可视化流程图。K

程序猿_三产 537

前端gulp的安装和使用,你或许用得到

前端gulp的安装和使用,你或许用得到

来一颗砂糖橘 1万+

OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南

OpenClaw已经开源3个月有余,作为深耕AI Agent领域的博主,我亲身探索了各种基于OpenClaw的赚钱方法,也踩过坑、付出了时间与精力。现在,我将这些真金白银砸出来的实战经验,毫无保留地总结成这个专栏,分享给不想从零开始摸索的你。博主在优快云已有7万+粉丝和1100万+阅读量,但这却是我的第一个付费专栏。正因如此,我比任何人都更珍惜这个“第一次”。我会像一个手艺人打磨作品一样,死磕每一篇文章的质量,并持续根据订阅者的反馈优化内容。也许你的疑问就是当篇文章的优化点。

冯·诺依曼 2442

利用gulp4.x自动化添加版本号 前端静态资源版本更新

导读 项目每次发布后,会有缓存问题,导致页面不更新,尤其是微信浏览器,缓存情况更为严重。然后利用gulp 给js,css自动化添加版本号,可解决缓存的问题。 网上资料中一般有两个方法: 生成一个新的dist目录,里面包含了要发布的html,js,css等文件 。 在原来的HTML文件上进行js ,css版本的替换,不需要生成新的目录文件。 最新gulp版本的修改方案如下: 首先安装如下依赖 c...

小青蛙的博客 1726

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

gulp+自动化编译html,gulp自动化构建html静态资源路径版本号添加和替换

gulp在使用gulp自动添加版本号时稍作一点修改,欢迎指正。我使用的是(gulp-rev+gulp-rev-collector),但是每次自动化构建都是依赖rev生成的json文件:"style.css": "style-f048bfa0ab.css","script.js": "scrip-5c69cf6d54.js",利用上面的json去修改html里面的静态路径,第二次如果不想去删除htm...

weixin_39963465的博客 257

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

gulp 自动化构建网站(版本号静态资源)

前言 新的一年啦,感觉总是静不下心,用了一天的时间吧,算是对gulp 这个前端打包工具入门了,自己也写了demo,表示对这个稍微理解了吧, 当然还是有差距的啦,下面讲讲怎么用吧: 如何用 当然先去官网去看下如何使用的,这个是入门指南https://www.gulpjs.com.cn/docs/getting-started/ 1. 全局安装 $ npm install ...

angliliu2521的博客 212

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

gulp html自动引用,关于gulp中自动添加版本号及Html文件应用路径替换的问题

最近项目做了一段时间了,为了测试的准确性及节约更多的时间,我们需要将前端中静态资源的引用加上hash版本号,以方便测试在工作时不用老是去清理缓存,因为项目工程本来就使用了Gulp,所以就在gulpfile.js中加入了gulp-rev和gulp-rev-collector两个插件来实现这个目的。最开始的时候还算顺利,不过在测试的时候发现问题,执行任务命令后,只在第一次自动替换了html中的资源链接...

weixin_39772388的博客 380

gulp打包静态资源并给引用资源自动添加版本号

最近在做pc端网站开发,现在项目已基本上线,但是每次修改文件上传后,都要清除浏览器缓存,这对用户来说是很不方便的,因此给引用资源添加版本号就非常有必要了,网上打包工具很多,最终选择了gulp,使用过程中遇到的问题做了以下记录,和大家分享,当然也有很多不足的地方,欢迎指正。 原html文件代码: <link rel="stylesheet" href="../css/default.css"&...

weixin_44193613的博客 929

Gulp前端框架,整合ssm项目做到清除前端页面缓存,给静态资源名添加版本号!

上周五,在和客户交流时总是出现,我们提交了代码,或者更新一版新的代码之后,我们在微信内置浏览器中,没有清理缓存请的情况下,页面的scc、js、字体文件、图片、都会出现无法更新到最新版本的情况。 领导交给了这个任务,让自动解决前段缓存问题,那么查阅相关资料之后,决定使用node.js中gulp插件包来做。那么废话不多说现在开始。 那么我们确定我们的静态文件有那些。我的项目中静态资源文件有这些: cs...

Mr.906的博客 826

使用 gulp-html-replace 前端自动化配置替换html模板中指定内容

导读 在某些开发项目中,我们需要用到动态输出index.html文件,而这个页面文件内的资源也是需要动态加载的,就比如说在线面这些开发条件: 一些静态资源需要加版本号 动态编译sass,把编译后的内容动态植入html的style标签中,或者自动引用编译好的css文件 在index.html文件中,动态插入多个js文件的script脚本内容 如果你想往页面中动态插入一些你需要的一些内容,那gulp...

小青蛙的博客 5591

GULP自动化打包构建工具

GULP gulp 是一个项目开发的 自动化打包构建工具 基于 node 环境来运行的 什么是自动化打包构建工具 比如 我们在开发的过程中,会写到 js 文件,css 文件,等等 我们的项目如果想上线,那么一定要体积小一点,文件大小越小越好 而我们在写 js 文件的时候,会有很多 换行/空格 之类的东西 这些 换行/空格 都是占文件体积的一部分 那么我们在上线之前就要吧这些 换行/空格 尽...

lff18277233091的博客 517

gulp html加版本号,gulp教程之自动添加版本号(示例代码)

1 创建项目安装nodejs/全局安装gulp/本地安装gulp/创建package.json和gulpfile.js文件,项目目录如下:2 自动更改版本号插件简介gulp-rev 为css文件中引入的图片或字体等添加hash编码gulp-asset-rev为js/css文件生成hash编码并生成 rev-manifest.json文件名对照映射gulp-rev-collector 为文件替换版本...

weixin_29982199的博客 448

gulp 移动文件_gulp自动化打包及静态文件自动添加版本号

前端自动化打包发布已是一种常态,尤其在移动端,测试过程中静态资源的缓存是件很头疼的事情,有时候明明处理的bug测试还是存在,其实就是缓存惹的祸,手机不比pc浏览器,清理缓存还是有点麻烦的。所以自动化实现静态资源的版本更新才是正道。实际开发过程中,我们常用到的功能包括:1、目标路径的清除;2、静态资源复制到目标路径;3、css文件的合并与压缩;4、js文件的合并与压缩;5、根据文件的变化添加版本号;...

weixin_31629913的博客 276

html防替换资源,前端静态资源自动化处理版本号防缓存

前端静态资源自动化处理版本号防缓存浏览器会默认缓存网站的静态资源文件,如:js文件、css文件、图片等。缓存带来网站性能提升的同时也带来了一些困扰,最常见的问题就是不能及时更新静态资源,造成新版本发布时用户无法及时看到新版本的变化,严重影响了用户体验。上述问题,最简单的办法就是在资源的请求路径上添加版本号,格式如下:url?v=1.0.0每次在更改资源的时候,手动修改版本号,但是每次手动改那么多后...

weixin_29149577的博客 511
上一篇: html 自定义元素 ie9,html – 为什么translateX不能像IE9,IE10和IE11上的固定元素一样工作?...
下一篇: 脚本攻击类型 简称 html,跨站脚本攻击与防范.doc
焚海炖鱼
博客等级 码龄8年 29粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值