通过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自动添加版本号
随机推荐
- poj 1386 Play on Words(有向图欧拉回路)
/* 题意:单词拼接,前一个单词的末尾字母和后一个单词的开头字母相同 思路:将一个单词的开头和末尾单词分别做两个点并建一条有向边!然后判断是否存在欧拉回路或者欧拉路 再次强调有向图欧拉路或欧拉回路的判 ...
- 《BI那点儿事》Microsoft 逻辑回归算法——预测股票的涨跌
数据准备:一组股票历史成交数据(股票代码:601106 中国一重),起止日期:2011-01-04至今,其中变量有“开盘”.“最高”.“最低”.“收盘”.“总手”.“金额”.“涨跌”等 UPDATE ...
- 队列的存储结构和常见操作(c 语言实现)
一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
- js组件在线编辑器插件、图表库插件、文件树插件
在线编辑器插件: 一.kindeditor 二.UEditor 图表库插件: 一.echart 二.highchart 文件树插件: 一.zTree -- jQuery 树插件 http://www. ...
- Kibana中doc与search策略的区别
在kibana中包含两种策略:doc和search.使用了两个循环队列来获取请求,并进行响应. doc的代码如下: clientMethod: 'mget' search的代码如下: clientMe ...
- JS魔法堂: Native Promise Only源码剖析
一, 前言 深入学习Promise的朋友应该都看过<深入理解Promise五部曲>这一系列的文章, 以解除回调地狱之外的观点来剖析Promise更多的内涵,确实十分精彩. Part 1: ...
- Maven提高篇系列之(五)——处理依赖冲突
这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...
- JQuery 快速入门一篇通
JQuery是什么? JQuery 是一套JavaScript库, 使用它,可以很方便的进行 JavaScript的编程.比如: 获取页面元素, 修改页面元素的CSS样式等等都可以以很简单的语法完成. ...
- C# winform Listbox添加和删除items
两个listbox添加和删除items #region 添加/移除 //添加 private void btnAdd_Click(object sender, EventArgs e) { ) { r ...
- C# 文件 文件夹
//判断文件夹(路径)是否存在 if (Directory.Exists(Path)) { } //获取文件大小 FileInfo file = new FileInfo(labOfPath); si ...