通过gulp为requireJs引入的模块添加版本号
由于项目用到requireJs,并且通过gulp来对项目进行统一的管理,为了防止浏览器对文件进行缓存,所以通过gulp为项目中的文件添加版本号。
1、分别安装gulp-rev、gulp-rev-collerctor
npm install --save-dev gulp-rev
npm install --save-dev gulp-rev-collector
打包后的效果
"/css/style.css" => "/dist/css/style-1d87bebe.css"
"/js/script1.js" => "/dist/script1-61e0be79.js"
预期效果
"/css/style.css" => "/dist/css/style.css?v=1d87bebe"
"/js/script1.js" => "/dist/script1.js?v=61e0be79"
2、打开node_modules\gulp-rev\index.js
//第144行
manifest[originalFile] = revisionedFile;
//改为
manifest[originalFile] = originalFile + '?v=' + file.revHash;
3、打开node_modules\rev-path\index.js
//第10行
return filename + '-' + hash + ext;
//改为
return filename + ext;
4.打开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 ( path.basename(json[key]).split('?')[0] !== path.basename(key) ) {
isRev = 0;
}
5.gulp生成版本号并替换html,css,js文件中的文件引入路径(网上教程很多,这里不多说上连接)
http://www.tuicool.com/articles/UbaqyyJ
http://www.cnblogs.com/givebest/p/4707432.html
6.引入路径注意事项
各个文件中的路径必须和修改版本号的json文件中的根路径必须一致(包括require.config.paths 路径),这样gulp才可以替换掉
//json文件
{
"app/css/demo.css":"app/css/demo.css?v=768b6e5d87",
"app/js/demo.js":"app/js/demo.js?v=09521ddbe3",
"app/js/a.js":"app/js/a.js?v=59dd7446a0"
}
<!--require的入口文件必须写完整路径-->
<script src="../lib/requires/requires.js" data-main="js/a"></script>
<!--改为-->
<script src="../lib/requires/requires.js" data-main="../app/js/a.js"></script>
<!--输出-->
<script src="../lib/requires/requires.js" data-main="../app/js/a.js?v=59dd7446a0"></script>
require.config.paths
paths:{
"demo":"../app/js/demo"
}
//改为
paths:{
"demo":"../app/js/demo.js"
}
//输出配置文件后
paths:{
"demo":"../app/js/demo.js?v=09521ddbe3"
}
7.修改require.js 源码解决引入路径中含有search值得路径报错问题(版本 "1.0.8")
修改resume 函数 在1169行后添加
//修改resume 函数 在1169行后添加
if( url.indexOf('?v=') !== -1 ){
if( /\.js$/.test(url) ){
url = url.slice(0,-3);
}
}
if( /\.js\.js$/.test(url) ){
url = url.slice(0,-3);
}
//修改nameToUrl函数 在 moduleName 赋值( 1488行)后添加
var recordUrl = '';
if( moduleName.indexOf('.js?') > -1 ){
recordUrl = moduleName.slice(moduleName.indexOf('?'));
moduleName = moduleName.slice(0,moduleName.indexOf('.js'));
}
//在生成文件路径后 (typeof config.urlArgs === 'string' 判断之前) 修改路径地址
url = url + recordUrl; if (!config.urlArgs) { return url; }
通过gulp为requireJs引入的模块添加版本号的更多相关文章
- 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5
Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ...
- 使用gulp解决RequireJS项目前端缓存问题(一)
1.前言 前端缓存一直是个令人头疼的问题,你有可能见过下面博客园首页的资源文件链接: 有没有发现文件名后面有一串不规则的东东,没错,这就是运用缓存机制,我们今天研究的就是这种东西. 先堵为快,猛戳链接 ...
- 前端自动化工具gulp自动添加版本号
之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...
- 使用gulp解决RequireJS项目前端缓存问题(二)
1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...
- gulp解决RequireJS
gulp解决RequireJS项目前端缓存问题(二) 前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过req ...
- gulp静态资源构建、压缩、版本号添加
公司移动端商城使用前后分离方案,前台nginx静态文件,js使用requirejs模式,使用gulp压缩添加版本号时发现问题, 问题1.在公共的js配置中,引用的路径是写死的,缓存会一直存在. 解决方 ...
- 前端静态资源版本更新与缓存之——gulp自动化添加版本号
公司项目每次发布后,偶尔会有缓存问题,然后看了下gulp,发现gulp还能给js,css自动化添加版本号,可解决缓存的问题,所以自动化实现静态资源的版本更新才是正道.通过网上的资料试过了两种办法: 1 ...
- SpringBoot2.x入门教程:引入jdbc模块与JdbcTemplate简单使用
这是公众号<Throwable文摘>发布的第23篇原创文章,收录于专辑<SpringBoot2.x入门>. 前提 这篇文章是<SpringBoot2.x入门>专辑的 ...
- Gulp自动添加版本号(转载)
本文转载自: gulp自动添加版本号
随机推荐
- [Qt5] Develop openCV3 by QML on Qt-creator
QML的酷炫控件,适合移动设备开发. qt-creator的跨平台是QML与opencv的粘合剂. 关键: QImage有若干种格式,转化为相应的Mat. Mat处理完后,还要正确得还原为原来格式的Q ...
- 转载-centos网络配置(手动设置,自动获取)的2种方法
转载地址:http://blog.51yip.com/linux/1120.html 重新启动网络配置 # service network restart 或 # /etc/init.d/networ ...
- Elasticsearch聚合 之 Date Histogram聚合
Elasticsearch的聚合主要分成两大类:metric和bucket,2.0中新增了pipeline还没有研究.本篇还是来介绍Bucket聚合中的常用聚合--date histogram.参考: ...
- 简单认识C#
C#浅解众所周知c#是微软推出的一款完全没面向对象的编程语言,那么对象是什么?在现实生活中人们一提到对象首先想到的就是“情侣”!但是在我们的程序中对象是什么? 在程序中个能够区别于其他事物的独立个体我 ...
- ROS 常用命令字典
版权声明:本文为博主原创文章,转载请标明出处: http://www.cnblogs.com/liu-fa/p/5761448.html 该博文适合已经具备一定的ROS编程基础的人,快速查看ROS相关 ...
- AppleScript的字典怎么看怎么用
新迭代之前忙里偷闲摸鱼了几种脚本的写法:bash, alfred,automator,applescript 这篇就说说这个applescript 以iterm为例 初看它的字典大概长这样: 1.方法 ...
- [译]针对科学数据处理的统计学习教程(scikit-learn教程2)
翻译:Tacey Wong 统计学习: 随着科学实验数据的迅速增长,机器学习成了一种越来越重要的技术.问题从构建一个预测函数将不同的观察数据联系起来,到将观测数据分类,或者从未标记数据中学习到一些结构 ...
- 在_Layout模版中使用@Styles.Render()没有效果
刚才有测试一个功能,就是在_Layout母版中使用了@Styles.Render()时行Render样式文件,所有在此母版下的视图均没有应用到样式,没有效果.是什么原因? 经查证资料,原来Insus. ...
- Jquery请求Ajax的json数据
获得单个json对象 $.getJSON("test.js", { name: "John", time: "2pm" }, funct ...
- 炉石传说 C# 开发笔记 (源代码整理公开)
源代码已经整理过了,去除了不需要的项目. 注意:以前文章中出现过的Git已经变更过了,请以前关注过,Fork过的朋友,重新Fork一下. GitHub地址 卡牌XML文件的做成:(Git上面是没有XM ...