gulp批量添加版本号
要实现的理想效果:
"/css/style.css" => "/dist/css/style.css?v=1d87bebe"
"/js/script1.js" => "/dist/script1.js?v=61e0be79"
"cdn/image.gif" => "//cdn8.example.dot/img/image.gif?v=35c3af8134"
1.安装Gulp
npm install --save-dev gulp
2.安装gulp-rev、gulp-rev-collerctor
npm install gulp-rev gulp-rev-collector --save-dev
3.打开node_modules\gulp-rev\index.js
第133行 manifest[originalFile] = revisionedFile;
更新为: manifest[originalFile] = originalFile + '?v=' + file.revHash;
4.打开node_modules\gulp-rev\node_modules\rev-path\index.js
10行 return filename + '-' + hash + ext;
更新为: return filename + ext;
5.打开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('?')[] !== path.basename(key) ) {
注:修改完node_modules\gulp-rev\index.js与node_modules\gulp-rev-collector\index.js 就已达到效果
另外附上es6的node_modules\gulp-rev-collector\index.js修改方法:
第40行 let cleanReplacement = path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' );
更新为 let cleanReplacement = path.basename(json[key]).split('?')[];
目录结构:

gulpfile.js文件
var gulp = require('gulp');
var clean = require('gulp-clean'); //清理文件或文件夹
var minify = require('gulp-uglify'); //- 压缩js;
//var concat = require('gulp-concat'); //- 多个文件合并为一个;
var minifyCss = require('gulp-minify-css'); //- 压缩CSS为一行;
var rev = require('gulp-rev'); //- 对文件名加MD5后缀
var revAppend = require('gulp-rev-append'); //- 给URL自动添加MD5版本号
var revCollector = require('gulp-rev-collector'); //- 路径替换
var replace = require('gulp-replace'); //替换地址
var runSequence = require('gulp-run-sequence');
var revFormat = require('gulp-rev-format');
var revReplace = require('gulp-rev-replace');
/*=====================清理构建目录==========================*/
gulp.task('clean', function () {
return gulp.src('dist/', {read: false})
.pipe(clean());
});
/*=====================copy其他静态资源文件==========================*/
gulp.task('copy', function() {
return gulp.src(['src/**/*'])
.pipe(gulp.dest('dist'))
});
/*=====================压缩js==========================*/
gulp.task('js', function(){
return gulp.src('dist/static/js/!(lib)/**/*.js') // 匹配
.pipe(minify())
//.pipe(rev())
.pipe(gulp.dest('dist/static/js')); // 写入 'dist/js'
});
/*=====================压缩css==========================*/
gulp.task('concat', function(){
return gulp.src(['dist/static/css/**/*.css']) //- 需要处理的css文件,放到一个字符串数组里
.pipe(minifyCss()) //- 压缩处理成一行
.pipe(gulp.dest('dist/static/css')) //- 输出文件本地
});
/*=====================压缩html==========================*/
gulp.task('miniHtml', function() {
return gulp.src('dist/views/*.hbs')
.pipe(revAppend())
.pipe(gulp.dest('dist/views/'));
});
/*=====================生成版本号清单==========================*/
gulp.task('rev', function() {
return gulp.src(['dist/static/!(lib)/**/*.*'])
.pipe(rev())
.pipe(revFormat({
prefix: '.', // 在版本号前增加字符
suffix: '.cache', // 在版本号后增加字符
lastExt: false
}))
.pipe(rev.manifest())
.pipe(gulp.dest("config/"));
});
/*=====================路径替换==========================*/
gulp.task('update-version', function() {
return gulp.src(['config/*.json','dist/views/**/*'])
.pipe(revCollector())//- 根据 .json文件 执行文件内css名的替换
.pipe(gulp.dest('dist/views'));
});
gulp.task('build', function(done) {
runSequence(
['clean'],
['copy'],
['js','concat'],
['rev'],
['update-version'],
done);
});
gulp.task('expressgulp', ['build']);
package.json文件
{
"name": "expressgulp",
"version": "1.0.1",
"description": "express nodeJs hbs模板",
"main": "app.js",
"dependencies": {
"amui-hbs-helper": "^2.2.0",
"body-parser": "^1.17.1",
"browser-sync": "^2.18.8",
"cookie-parser": "^1.4.3",
"express": "^4.15.2",
"express-session": "^1.15.2",
"fs": "0.0.1-security",
"gulp": "^3.9.1",
"gulp-clean": "^0.3.2",
"gulp-minify-css": "^1.2.4",
"gulp-replace": "^0.5.4",
"gulp-replace-task": "^0.11.0",
"gulp-rev": "^7.1.2",
"gulp-rev-collector": "^1.1.1",
"gulp-rev-format": "^1.0.4",
"gulp-rev-replace": "^0.4.3",
"gulp-run-sequence": "^0.3.2",
"gulp-seajs-concat": "^1.0.5",
"gulp-seajs-transport": "^0.4.0",
"gulp-uglify": "^2.1.2",
"handlebars": "^4.0.8",
"hbs": "^4.0.1",
"jquery": "^3.2.1",
"merge-stream": "^1.0.1",
"multer": "^1.3.0",
"seajs": "^3.0.2",
"session": "^0.1.0",
"yargs": "^7.0.2"
},
"devDependencies": {
"gulp-rev-append": "^0.1.8",
"http": "0.0.0"
},
"scripts": {
"注释": "npm run test以debug形式启动,另打开cmd命令node-inspector -p 8081 启动断点调试命令",
"test": "supervisor --debug app.js",
"dev": "node app.js"
},
"keywords": [
"express",
"hbs"
],
"author": "qjh",
"license": "ISC"
}
最终效果:

都已加上版本号:

项目地链接:https://github.com/qjhe/expressGulp
参考 http://www.cnblogs.com/givebest/p/4707432.html
gulp批量添加版本号的更多相关文章
- Gulp自动添加版本号(转载)
本文转载自: gulp自动添加版本号
- 前端自动化工具gulp自动添加版本号
之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...
- 前端静态资源版本更新与缓存之——gulp自动化添加版本号
公司项目每次发布后,偶尔会有缓存问题,然后看了下gulp,发现gulp还能给js,css自动化添加版本号,可解决缓存的问题,所以自动化实现静态资源的版本更新才是正道.通过网上的资料试过了两种办法: 1 ...
- gulp自动化添加版本号并修改为参数格式
问题: 当我们修改js和css文件时往往需要清除浏览器的缓存,否则有些效果就看不到更新过后的. 通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件修改则hash号会 ...
- Gulp自动添加版本号
推荐使用gulp-rev + gulp-rev-collector是比较方便的方法,结果如下: "/css/style.css" => "/dist/css/sty ...
- gulp 批量添加类名 在一个任务中使用多个文件来源
1.首先安装环境 1.安装gulp: npm install gulp 2.安装gulp-clean-css npm install gulp-clean-css 3.安装gulp-css-wrap ...
- gulp 自动添加版本号
本文介绍利用 gulp-rev 和 gulp-rev-collector 进行版本管理 npm官网介绍使用后的效果如下: "/css/style.css" => " ...
- gulp自动添加版本号过程中的一些要点记录
1.打开node_modules\gulp-rev\index.js 第144行 manifest[originalFile] = revisionedFile; 更新为: manifest[orig ...
- 使用gulp添加版本号
由于js和css的缓存问题,所以,希望在html上给js和css添加上版本号. 常见的用法是使用gulp-rev和gulp-rev-collector进行操作.使用这两个插件,得到的效果如下图所示: ...
随机推荐
- linux lnmp搭建
1.安装nginx: yum install gcc -y yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum inst ...
- 使用extentreports美化testng报告2,增加监听
有兴趣研究了extentreports报告美化插件,但是因为发现插件有很多内容不能自定义,所以放弃了这个插件,我扩充了官方代码的demo,在testng中增加了监听,并打印了一些测试用例,现在我把两个 ...
- LCT入门
前言 \(LCT\),真的是一个无比神奇的数据结构. 它可以动态维护链信息.连通性.边权.子树信息等各种神奇的东西. 而且,它其实并不难理解. 就算理解不了,它简短的代码也很好背. \(LCT\)与实 ...
- Poj(2421),Prim最小生成树
题目链接:http://poj.org/problem?id=2421 最小生成树的变形,有的村庄已经连接了,就直接把他们的权值赋为0,一样的做最小生成树,Prim算法. #include <s ...
- 牛客国庆day 6 A
题目链接 : https://ac.nowcoder.com/acm/contest/206/A 这个题去年有幸去秦皇岛参加集训,见过这道题,当时特别菜还不会网络流,现在学了一点发现这个网络流还是比较 ...
- requireJS的学习
官方文档 http://www.requirejs.cn/ 参考链接 http://www.w3cschool.cc/w3cnote/requirejs-tutorial-1.html http:// ...
- C# 变量与常量
变量表示存储位置,变量必须有确定的数据类型.C#的类型安全的含义之一就是确保变量的存储位置容纳着合适的类型.可以将C#中的变量分为静态变量,实例变量,传值参数,引用参数,输出参数,数组参数和本地变量共 ...
- 前端css之文本操作及块级元素和行内元素
1.文本操作 1.1文本颜色(color) 颜色指定方式: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB(255,0,0) 颜色的名称 - 如: red 1.2水平对齐方式 ...
- java基础必备单词讲解 day six
development development development development 开发 development developmentenvironment environment en ...
- jquery操作元素的位置
.offset() 在匹配的元素中,获取第一个元素的当前坐标,或设置每一个元素的坐标,坐标相对于文档. .offset() 这个不接受任何参数. var offset = p.offset(); // ...