添加js,css 版本号?v= hash
node_modules设置
a.打开 node_modules\gulp-rev\index.js
第144行 manifest[originalFile] = revisionedFile; 更新为: manifest[originalFile] = originalFile + '?v=' + file.revHash;

在node_modules\rev-path\index.js 目录中第10行:改成如下:
b.打开 nodemodules\gulp-rev\nodemodules\rev-path\index.js
10行 return filename + '-' + hash + ext; 更新为: return filename + ext;

c.打开 node_modules\gulp-rev-collector\index.js
31行 if ( path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' ) !== path.basename(key) ) { 更新为: if ( path.basename(json[key]).split('?')[0] !== path.basename(key) ) {}
d.压缩处理模块JS
gulp.task('moduleJs', function () {
for (var i = 0; i < moduleJs.length; i++) {
//example:oauth_web/dist/static/js/login/login.min.js;
del(moduleJs[i].basedir + 'dist/'+'static/'+'js/'+moduleJs[i].name + '/' + moduleJs[i].name+'.min.js');
del(moduleJs[i].basedir + 'concat/'+'static/'+'js/'+moduleJs[i].name + '/' + moduleJs[i].name+'.js');
if (!moduleJs[i].deps) {
moduleJs[i].deps = [];
}
var resource = moduleJs[i].deps.concat(moduleJs[i].basedir + 'static/' + "js/" + moduleJs[i].name + '/' + moduleJs[i].name + '.js');
console.log(resource); //获取原文件的位置
gulp.src(resource)
.pipe(gulpConcat(moduleJs[i].name + '.js'))//合并所有js到模块名称.js
.pipe(gulp.dest(moduleJs[i].basedir + 'concat/' + 'static/' +'js/' + moduleJs[i].name)) //输出合并后单没有压缩模块到.js到文件夹
.pipe(rename({suffix: '.min'}))
.pipe(uglify())//压缩
.pipe(rev()) //加MD5后缀
.pipe(gulp.dest(moduleJs[i].basedir +'dist/'+'static/'+'js/'+moduleJs[i].name)) //输出
.pipe(rev.manifest()) //生成映射json文件
.pipe(gulp.dest(baseRev + moduleJs[i].basedir +'static/' + 'js/' + moduleJs[i].name));
}
});
e.压缩相应html时引入json文件添加对应的hash版本号
/**
* 引入版本号,压缩html
*/
gulp.task('miniHtml', function () {
for (var i = 0; i < moduleHtml.length; i++) {
if (!moduleHtml[i].revJs) {
moduleHtml[i].revJs = [];
}
//引入之前生成的版本号JSON文件 var revJson = '/*.json';
var revModuleJs = baseRev + moduleHtml[i].basedir +'static/' + 'js/' + moduleHtml[i].name + revJson;
var revModuleCss = baseRev + moduleHtml[i].basedir + 'static/'+ 'css/' + moduleHtml[i].name + revJson;
var resHtml = moduleHtml[i].basedir + moduleHtml[i].name + '.html'; //需要处理html地址
var resource = moduleHtml[i].revJs.concat([revModuleJs,revModuleCss]);
if (moduleHtml[i].revCss) {
resource = resource.concat(moduleHtml[i].revCss);
}
resource = resource.concat(resHtml);
console.log(resource);
var options = {
removeComments: true, //清除HTML注释
collapseWhitespace: true, //压缩HTML
collapseBooleanAttributes: true, //省略布尔属性的值 <input checked="true"/> ==> <input checked />
removeEmptyAttributes: true, //删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: true, //删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true, //删除<style>和<link>的type="text/css"
minifyJS: true, //压缩页面JS
minifyCSS: true //压缩页面CSS
};
//生成合并的文件
gulp.src(resource)
.pipe(htmlreplace({
'css':{
src:'static/' + 'css/' + moduleHtml[i].name + '/' + moduleJs[i].name + '.css',
tpl:'<link rel="stylesheet" href="%s" data-res="eebbk">'
},
'js': {
src:'static/' + 'js/' + moduleHtml[i].name + '/' + moduleJs[i].name + '.js',
tpl:'<script src="%s"></script>'
}
}))
.pipe(revCollector()) //添加版本号
.pipe(gulp.dest(moduleHtml[i].basedir+'concat/')); //输出到合并的文件夹中 //生成压缩后的文件
gulp.src(resource) .pipe(htmlreplace({
'css':{
src:'static/' + 'css/' + moduleHtml[i].name + '/' + moduleJs[i].name + '.min.css',
tpl:'<link rel="stylesheet" href="%s">'
},
'js': {
src:'static/' + 'js/' + moduleHtml[i].name + '/' + moduleJs[i].name + '.min.js',
tpl:'<script src="%s"></script>'
}
}))
.pipe(revCollector()) //添加版本号
.pipe(htmlmin(options))
.pipe(rename({
prefix : "",
basename : moduleHtml[i].name,
suffix : ""
}))
.pipe(gulp.dest(moduleHtml[i].basedir+'dist/')); //输出到dist文件夹中
}
});
f.最后生成文件带有版本号的,至此完成此功能!!
添加js,css 版本号?v= hash的更多相关文章
- 前端静态资源版本更新与缓存之——通过gulp 在原html文件上自动化添加js、css版本号
原理 修改js和css文件 通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件修改则hash号会发生变化) 替换html中的js,css文件名,生成一个带版本号的文 ...
- 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5
Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ...
- [Asp.net Mvc]为js,css静态文件添加版本号
方式一: 思路 string version = ViewBag.Version; @Scripts.RenderFormat("<script type=\"text/ja ...
- MVC学习随笔----如何在页面中添加JS和CSS文件
http://blog.csdn.net/xxjoy_777/article/details/39050011 1.如何在页面中添加Js和CSS文件. 我们只需要在模板页中添加JS和CSS文件,然后子 ...
- ASP.NET给前端动态添加修改 CSS样式JS 标题 关键字
有很多网站读者能换自己喜欢的样式,还有一些网站想多站点共享后端代码而只动前段样式,可以采用动态替换CSS样式和JS. 如果是webform 开发,可以用下列方法: 流程是首先从数据中或者xml读取数据 ...
- asp.net后台代码动态添加JS文件和css文件的引用
首先添加命名空间 using System.Web.UI.HtmlControls; 代码动态添加css文件的引用 HtmlGenericControl myCss = new HtmlGeneric ...
- ASP.NET给前端动态添加修改 CSS样式JS 标题 关键字(转载)
原文地址:http://www.cnblogs.com/xbhp/p/6392225.html 有很多网站读者能换自己喜欢的样式,还有一些网站想多站点共享后端代码而只动前段样式,可以采用动态替换CSS ...
- gulp实现打包js/css/img/html文件,并对js/css/img文件加上版本号
参考打包教程: http://www.cnblogs.com/tugenhua0707/p/4069769.html http://www.cnblogs.com/tugenhua0707/p/498 ...
- js 动态添加 外部js css 到head标签
function appendJQCDN() { var head = document.head || document.getElementsByTagName('head')[0]; var s ...
随机推荐
- Fragment与Activity之间的相互通信
https://blog.csdn.net/u012702547/article/details/49786417 https://blog.csdn.net/carson_ho/article/de ...
- 2017-2018-2 20155303『网络对抗技术』Exp7:网络欺诈防范
2017-2018-2 『网络对抗技术』Exp7:网络欺诈防范 --------CONTENTS-------- 一.原理与实践说明 1.实践目标 2.实践内容概述 3.基础问题回答 二.实践过程记录 ...
- Jetson tx1 安装ROS
注意,是 Jetson TX1 系统版本: R24.2 参考链接: https://www.youtube.com/watch?v=-So2P0kRYsk
- C++学习4-面向对象编程基础(面向对象概念,定义类,定义对象)
什么是面向对象? 在软件的设计过程中的两种方式: 把程序按照算法的执行步骤来拆解,一步步实现,这是面向过程编程: 把程序按照现实世界的理解,分成不同对象,通过多个对象之间的相互作用,来完成程序的最终功 ...
- python 退出程序的方式
python程序退出方式[sys.exit() os._exit() os.kill() os.popen(...)] 知乎说明 http://www.zhihu.com/question/21187 ...
- 12-关于DOM操作的相关案例
1.模态框案例 需求: 打开网页时有一个普通的按钮,点击当前按钮显示一个背景图,中心并弹出一个弹出框,点击X的时候会关闭当前的模态框 代码如下: <!DOCTYPE html> <h ...
- Ex 6_23 一个生产系统共包含n个顺序执行的阶段..._第七次作业
- PHP时间类完整实例
<?php header("Content-type:text/html;Charset=utf-8"); class time{ private $year;//年 pri ...
- 2017-2018-2 20155309南皓芯 Exp6 信息搜集与漏洞扫描
实践内容 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 4.漏洞扫描:会扫,会看报告,会查漏洞说明,会修补漏洞 基 ...
- FXML Stuffs (include and define)
FXML Stuffs (include and define)Hello folks,Today I would like to blog about the FXML define and inc ...