由于项目用到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引入的模块添加版本号的更多相关文章

  1. 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5

    Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ...

  2. 使用gulp解决RequireJS项目前端缓存问题(一)

    1.前言 前端缓存一直是个令人头疼的问题,你有可能见过下面博客园首页的资源文件链接: 有没有发现文件名后面有一串不规则的东东,没错,这就是运用缓存机制,我们今天研究的就是这种东西. 先堵为快,猛戳链接 ...

  3. 前端自动化工具gulp自动添加版本号

    之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...

  4. 使用gulp解决RequireJS项目前端缓存问题(二)

    1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...

  5. gulp解决RequireJS

    gulp解决RequireJS项目前端缓存问题(二)   前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过req ...

  6. gulp静态资源构建、压缩、版本号添加

    公司移动端商城使用前后分离方案,前台nginx静态文件,js使用requirejs模式,使用gulp压缩添加版本号时发现问题, 问题1.在公共的js配置中,引用的路径是写死的,缓存会一直存在. 解决方 ...

  7. 前端静态资源版本更新与缓存之——gulp自动化添加版本号

    公司项目每次发布后,偶尔会有缓存问题,然后看了下gulp,发现gulp还能给js,css自动化添加版本号,可解决缓存的问题,所以自动化实现静态资源的版本更新才是正道.通过网上的资料试过了两种办法: 1 ...

  8. SpringBoot2.x入门教程:引入jdbc模块与JdbcTemplate简单使用

    这是公众号<Throwable文摘>发布的第23篇原创文章,收录于专辑<SpringBoot2.x入门>. 前提 这篇文章是<SpringBoot2.x入门>专辑的 ...

  9. Gulp自动添加版本号(转载)

    本文转载自: gulp自动添加版本号

随机推荐

  1. NYOJ995硬币找零(简单dp)

    /* 题意:给你不同面额的硬币(每种硬币无限多),需要找零的面值是T,用这些硬币进行找零, 如果T恰好能被找零,输出最少需要的硬币的数目!否则请输出剩下钱数最少的找零方案中的最少硬币数! 思路:转换成 ...

  2. php基础教程-输出Hello World

    <!DOCTYPE html> <!--!文档类型,一个文档类型标记是一种标准通用标记语言的文档类型声明, 它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(D ...

  3. Android基于mAppWidget实现手绘地图(十六)–处理一次触摸多个地图对象

    最好的处理方式就是弹出一个对话框,将用户触摸过的控件罗列出来.你可以通过实现OnMapTouchListener来处理. 参考以下代码,实现上述功能: mapWidget.setOnMapTouchL ...

  4. js页面跳转整理

    js页面跳转整理 js方式的页面跳转1.window.location.href方式    <script language="javascript" type=" ...

  5. CentOS7 SonarQube安装

    CentOS7 SonarQube安装 CentOS7 SonarQube安装 Download 从sonarqube下载sonarqube-5.0.zip 从sonarqube下载sonar-run ...

  6. js基础-表单验证和提交

    基础知识: 原始提交如下: <form action="/login" method="post" id="form1"> &l ...

  7. Apache Kylin 部署之不完全指南

    1. 引言 Apache Kylin(麒麟)是由eBay开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据.底层存储用的是HBase,数据输入与cu ...

  8. JavaScript可否多线程? 深入理解JavaScript定时机制

    JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...

  9. Vue2.0流式渲染中文乱码问题

    在参照vue2.0中文官方文档学习服务端渲染之流式渲染时,因为响应头默认编码类型为GBK,而文件为UFT-8类型,所以出现了中文乱码问题. 解决办法:设置响应头编码类型即可 response.setH ...

  10. 原生JS 获取浏览器、窗口、元素等尺寸的方法及注意事项

    一.通过浏览器获得屏幕的尺寸 screen.width screen.height screen.availHeight //获取去除状态栏后的屏幕高度 screen.availWidth //获取去 ...