添加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 ...
 
随机推荐
- nginx入门一
			
配置文件: server_name user root; worker_processes 2; error_log logs/error-test.log; #pid logs/nginx.pid; ...
 - 转载CSDN博客步骤
			
在参考“如何快速转载CSDN中的博客”后,由于自己不懂html以及markdown相关知识,所以花了一些时间来弄明白怎么转载博客,以下为转载CSDN博客步骤和一些知识小笔记. 参考博客原址:http: ...
 - ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory Type and Attributes
			
1.前言 2. Memory类型和属性 memory分为normal memory和device memory,两种类型的Memory有各自的属性,除了下面介绍的几种属性外,还有其他一些杂项属性 2. ...
 - 【转】Oracle 11g安装图文攻略
			
一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 二.Oracle安装 1. ...
 - InetAddress问题
			
InetAddress的方法 当输入InetAddress.getByAddress(new byte[]{127.0.0.1})的时候不会报错, 但是ip的各段值是0-255,当new byte[] ...
 - android getActivity.findViewById获取ListView  返回NULL
			
在控件ID正确的情况下,检查是否在实例化布局文件之后,获取LISTVIEW, 先inflate找layout下布局文件,并实例化后才能获得Listview的ID demo: public class ...
 - javascript 类型比较方法
			
不要使用new Number().new Boolean().new String()创建包装对象: 用parseInt()或parseFloat()来转换任意类型到number: 用String() ...
 - su和sudo命令详解
			
我们知道,在Linux下对很多文件进行修改都需要有root(管理员)权限,比如对/ect/profile等文件的修改.很多情况下,我们在进行开发的时候都是使用普通用户进行登录的,尤其在进行一些环境变量 ...
 - Office系列版本安装包下载
			
链接:http://pan.baidu.com/s/1i4UFZOp 密码:f9y8 链接:http://pan.baidu.com/s/1i4YJN4D 密码:743q 链接:http://pan ...
 - win10下vscode配置sftp
			
sftp配置 1.在vscode中下载sftp插件 在vscode中快捷键 ctrl+shift+P 打开指令窗口,输入extension:install,回车,左侧即打开扩展安装的界面 在搜索框中 ...