通过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自动添加版本号
随机推荐
- jQuery.validationEngine.js学习
项目中使用到了这个插件,抽了个空,看了一下. (function($){ var method ={} $.fn.validationEngine = function(){} $.validatio ...
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
概要 本章是JUC系列的ConcurrentHashMap篇.内容包括:ConcurrentHashMap介绍ConcurrentHashMap原理和数据结构ConcurrentHashMap函数列表 ...
- LSA,pLSA原理及其代码实现
一. LSA 1. LSA原理 LSA(latent semantic analysis)潜在语义分析,也被称为 LSI(latent semantic index),是 Scott Deerwest ...
- Windows 8(虚拟机环境)安装.NET Framework3.5(includes .NET 2.0 and 3.0)
按照这篇文章:http://blogs.technet.com/b/aviraj/archive/2012/08/04/windows-8-enable-net-framework-3-5-inclu ...
- JS网页顶部弹出可关闭广告图层
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?
在 <Cordova webapp实战开发:(4)Android环境搭建>中我们搭建好了开发环境,也给大家布置了调用插件的预习作业,做得如何了呢?今天我们来学一下如何自己从头建立一个And ...
- 一个java页游服务器框架
一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简 ...
- C#实现WinForm DataGridView控件支持叠加数据绑定
我们都知道WinForm DataGridView控件支持数据绑定,使用方法很简单,只需将DataSource属性指定到相应的数据源即可,但需注意数据源必须支持IListSource类型,这里说的是支 ...
- PHPcms 系统简单使用
1.站点/发布点的新建 1.1 发布点的新建: 发布点是设置站点与服务器之间的链接配置. 设置 - 发布点管理 - 添加发布点 发布点名:可以与接下来的站点名称相同 ftp服务器:用于设置PHPcms ...
- C# 视频流操作
发送视频流 void SendVideoBuffer(object bufferIn) { try { TcpClient tcp = ); NetworkStream ns = tcp.GetStr ...