gulp 自动添加版本号
2023-09-17 11:30
-->
本文介绍利用 gulp-rev 和 gulp-rev-collector 进行版本管理
npm官网介绍使用后的效果如下:
"/css/style.css" => "/dist/css/style-1d87bebe.css"
"/js/script1.js" => "/dist/script1-61e0be79.js"
"cdn/image.gif" => "//www.ikosingapore.com/img/image-35c3af8134.gif"
替换后:
"/js/script1.js" => "/dist/script1-61e0be79.js"
"cdn/image.gif" => "//www.ikosingapore.com/img/image-35c3af8134.gif"
gulp-rev: 对目标文件进行MD5计算序列值,更改文件名,生成键值对json文件(manifest文件,如上)
gulp-rev-collector: 根据manifest文件的对应关系,替换目标文件内的引用链接,效果如下:
替换后:
但这种更改文件名的方式 容易导致发布后由于种种原因导致某些文件找不到的问题。
所以我们想更改为如下的方式:
"activity/channel/2.css": "activity/channel/2.css?v=4ddaaeae28"
"activity/christmas.css": "activity/christmas.css?v=2d21a0c7ca"
"activity/channel/1.jpg": "activity/channel/1.jpg?v=c8571d8112"
"activity/christmas.css": "activity/christmas.css?v=2d21a0c7ca"
"activity/channel/1.jpg": "activity/channel/1.jpg?v=c8571d8112"
即在不更改文件名,在引用的文件名后加?v=hashVal的方式。
需要我们手动更改这两个插件的源代码,如下:
第一步:打开node_modules\gulp-rev\index.js 第144行
/*manifest[originalFile] = revisionedFile;*/
manifest[originalFile] = originalFile + '?v=' + file.revHash;
manifest[originalFile] = originalFile + '?v=' + file.revHash;
第二步:打开nodemodules\gulp-rev\nodemodules\rev-path\index.js 第10行
(如果找不到此文件,则找到路径nodemodules\rev-path\index.js 第10行进行修改)
/*return filename + '-' + hash + ext;*/
return filename + ext;
return filename + ext;
第三步:打开node_modules\gulp-rev-collector\index.js
第31行
/*if ( !_.isString(json[key]) || path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' ) !== path.basename(key) ) {
isRev = 0;
}*/ if ( !_.isString(json[key]) || path.basename(json[key]).split('?')[0] !== path.basename(key) ) {
isRev = 0;
}
isRev = 0;
}*/ if ( !_.isString(json[key]) || path.basename(json[key]).split('?')[0] !== path.basename(key) ) {
isRev = 0;
}
第50行
/*return pattern.replace(/[\-\[\]\{\}\(\)\*\+\?\.\^\$\|\/\\]/g, "\\$&");*/
var rp = pattern.replace(/[\-\[\]\{\}\(\)\*\+\?\.\^\$\|\/\\]/g, "\\$&");
rp = pattern + "(\\?v=(\\d|[a-z]){8,10})*";
return rp;
var rp = pattern.replace(/[\-\[\]\{\}\(\)\*\+\?\.\^\$\|\/\\]/g, "\\$&");
rp = pattern + "(\\?v=(\\d|[a-z]){8,10})*";
return rp;
第90行
/*patterns.push( escPathPattern( (path.dirname(key) === '.' ? '' : closeDirBySep(path.dirname(key)) ) + path.basename(key, path.extname(key)) )
+ opts.revSuffix
+ escPathPattern( path.extname(key) )
);*/ patterns.push( escPathPattern( (path.dirname(key) === '.' ? '' : closeDirBySep(path.dirname(key)) ) + path.basename(key, path.extname(key)) )
+ opts.revSuffix
+ escPathPattern( path.extname(key) ) + "(\\?v=(\\d|[a-z]){8,10})*"
);
css中:
background: url(/img/all.png?v=d69570864e) no-repeat;
+ opts.revSuffix
+ escPathPattern( path.extname(key) )
);*/ patterns.push( escPathPattern( (path.dirname(key) === '.' ? '' : closeDirBySep(path.dirname(key)) ) + path.basename(key, path.extname(key)) )
+ opts.revSuffix
+ escPathPattern( path.extname(key) ) + "(\\?v=(\\d|[a-z]){8,10})*"
);
OK,这样就得到了如下的结果:
css中:
background: url(/img/all.png?v=d69570864e) no-repeat;
可能出现的问题:
权限问题,建议删除node_modules文件夹,把gulp插件重新构建
npm install
如果不行,看下是否是windows下的gulp操作虚拟机中的文件,如果是,尝试在虚拟机中重新安装node npm gulp然后运行试试。
gulpfile.js 源码参考
-->相关文章
告别阿里“大锅饭”,优酷何去何从?
2023-10-05 20:39
李智表示,首先,他们工作室的员工没有参加阿里的年度绩效考核。 13工资变成了12工资,大家的工资变成了底薪+奖金。能否拿到奖金的考核标准很简单,就是能否完成项目。初始 KPI 目标设定。李智表示,业务...
vs2010激活码安全_Visual S
2023-10-05 19:54
YCFHQ-9DWCY-DKV88-T2TMH-G7BHPVisual Studio 2010激活码 Visual Studio 2010注册码 YCFHQ-9DWCY-DKV88-T2TMH-G7B...
stm32单片机可以做什么项目(stm3
2023-10-05 19:54
stm32单片机可以做什么项目(stm32单片机可以做什么项目)有谁知道企业一般使用哪些STM32产品?学了这个以后在深圳找工作待遇怎么样?STM32 是一款 32 位微控制器。一般用于工业控制、仪器...
progisp可以烧录 51_progi
2023-10-05 19:51
本文内容列表:1.如何烧写arduino bootloader2、如何使用progisp1.72编程?对于stc的89c51,我可以只使用isp刻录器吗?3、AT系列51单片机串口编程方法4、ATME...
vs2010中三角函数_系列概述 - A
2023-10-05 18:25
1.下载gsl1. 从http://gnuwin32.sourceforge.net/packages/gsl.htm 下载完整包,除了sources 和Sources 两个exe 文件。 (注:我从...
PHP使用cURL相关函数设置代理并处理
2023-10-05 18:12
设置代理:如果需要通过代理服务器访问目标URL,可以使用以下cURL相关函数来设置代理:curl_setopt($ch, CURLOPT_PROXY, 'proxy.example.com:8080'...
Python核心编程1
2023-10-05 18:12
Python是一种动态语言1。动态语言的定义动态编程语言是高级编程语言的一类,已广泛应用于计算机科学领域。它是一种结构可以在运行时更改的语言:例如,可以引入新函数、对象甚至代码,可以删除现有函数,或者...
Python多线程和锁
2023-10-05 18:12
多线程类似于同时执行多个不同的程序。多线程具有以下优点:(1)使用线程可以将长期的程序任务放到后台处理。(2)用户界面可以更加美观,这样如果用户点击按钮触发某些事件的处理,可以弹出进度条来显示处理的进...
合友网络安全:保护您的数字生活(合友网络
2023-10-05 17:54
如今,互联网已经成为不可或缺的一部分,一切形式的生活和工作都与互联网有关。然而,随着互联网的广泛使用和数字生活方式的普及,网络安全问题日益严重。大量私人信息被网络黑客窃取,甚至个人和国家安全受到威胁。...
Redis漏洞危害及防范(什么是redi
2023-10-05 17:51
Redis漏洞:危害及防范Redis 是一个高性能的键值存储系统。由于其速度快、部署简单、使用方便等优点,已广泛应用于各种业务场景。然而Redis本身也存在很多漏洞。最致命的漏洞称为“未经授权的访问”...
如何查看Redis中的连接数(redis
2023-10-05 17:51
Redis是一个开源的NoSQL数据库,因其高性能、扩展性强等优势,在互联网领域得到广泛应用。在Redis中,连接数是一个非常重要的指标,它直接影响Redis的性能和稳定性。那么,如何查看Redis的...
Linux输入法安装指南(如何安装lin
2023-10-05 17:51
Linux系统中输入法的安装非常简单,即使是新手也可以完成安装,无需太麻烦。我们来看看Linux输入法安装指南。1。安装Linux必要的环境文件开始安装输入法之前,需要安装Linux平台必需的环境文件...
windows7原版iso镜像下载_wi
2023-10-05 17:37
哪里下载windows7原版iso镜像文件稳定?很多用户在选择系统的时候,都希望可以安装正版系统。因为正版系统永久激活,可以长期使用。那么今天系统城小编就和大家分享windows7原版镜像文件下载地址...
win7官方原版镜像下载地址|免费下载w
2023-10-05 17:37
win7官方原版镜操作界面深受用户喜爱,凡是有给电脑安装过win7官方原版镜像系统的用户都说很好用。集成最全面的硬件驱动,精心挑选的系统维护工具。既然小伙伴这么喜欢win7官方原版镜像系统,今天就让小...
win7中文正式版下载 win7官网原版
2023-10-05 17:37
微软作为一个国外的电脑公司,推出的原版软件大部分都是英文版的,所以对于部分中国用户来说不太习惯使用,有很多的小伙伴想要寻找Windows7官网中文原版镜像文件下载却总是找不到或者依然时英文版的,所以今...