要实现的理想效果:

"/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批量添加版本号的更多相关文章

  1. Gulp自动添加版本号(转载)

    本文转载自: gulp自动添加版本号

  2. 前端自动化工具gulp自动添加版本号

    之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...

  3. 前端静态资源版本更新与缓存之——gulp自动化添加版本号

    公司项目每次发布后,偶尔会有缓存问题,然后看了下gulp,发现gulp还能给js,css自动化添加版本号,可解决缓存的问题,所以自动化实现静态资源的版本更新才是正道.通过网上的资料试过了两种办法: 1 ...

  4. gulp自动化添加版本号并修改为参数格式

    问题: 当我们修改js和css文件时往往需要清除浏览器的缓存,否则有些效果就看不到更新过后的. 通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件修改则hash号会 ...

  5. Gulp自动添加版本号

    推荐使用gulp-rev + gulp-rev-collector是比较方便的方法,结果如下: "/css/style.css" => "/dist/css/sty ...

  6. gulp 批量添加类名 在一个任务中使用多个文件来源

    1.首先安装环境 1.安装gulp: npm install gulp 2.安装gulp-clean-css npm install gulp-clean-css 3.安装gulp-css-wrap ...

  7. gulp 自动添加版本号

    本文介绍利用 gulp-rev 和 gulp-rev-collector 进行版本管理 npm官网介绍使用后的效果如下: "/css/style.css" => " ...

  8. gulp自动添加版本号过程中的一些要点记录

    1.打开node_modules\gulp-rev\index.js 第144行 manifest[originalFile] = revisionedFile; 更新为: manifest[orig ...

  9. 使用gulp添加版本号

    由于js和css的缓存问题,所以,希望在html上给js和css添加上版本号. 常见的用法是使用gulp-rev和gulp-rev-collector进行操作.使用这两个插件,得到的效果如下图所示: ...

随机推荐

  1. IOS 读取xib里的子控件

    interface ViewController () /**获取.plist数据*/ @property (nonatomic,strong) NSArray *aps; @end @impleme ...

  2. [转载]——Axure+SVN配置

    最近进行考试系统重构,一个小组十几个人,这么多人要同时搞需求画原型.这样原本的合作开发工具SVN已经不能满足现在的需求了,这是就找到了一个新的方法——Axure+SVN. 在SVN服务器端建立一个空的 ...

  3. ZOJ 2314 Reactor Cooling 带上下界的网络流

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 题意: 给n个点,及m根pipe,每根pipe用来流躺液体的, ...

  4. GPGPU::数学基础教程

    并行方向需要学习的数学知识 http://dev.gameres.com/Program/Visual/3D/GPGPU_math_Tutorial.html

  5. git 提交 src refspec master does not match any

    git init 产生的目录解释   error: src refspec master does not match any. 引起该错误的原因是,目录中没有文件,空目录是不能提交上去的 error ...

  6. extjs3EmptyText 上传自动清空的问题

    在extjs3表单的操作中,输入框经常有提示性的默认字段,比如: // === 接入单位的Form表单 ====== var jrdwForm = new Ext.form.FormPanel({ b ...

  7. 我是如何根据豆瓣api来理解Restful API设计的

    1.什么是REST REST全称是Representational State Transfer,表述状态转移的意思.它是在Roy Fielding博士论文首次提出.REST本身没有创造新的技术.组件 ...

  8. git和svn的混用

    服务器上的项目是使用svn进行管理的. 本来本地的项目也是通过svn进行管理的,但是后来使用svn的分支功能进行项目的测试/新功能等等时,总是会出现各种各样的问题,遂转投git. 因为git的分支机制 ...

  9. 利用python在windows环境下爬取赶集网工作信息。

    主要用到了多进程和多线程的知识,最后结果保存成csv文件格式,如有需要可改成数据库版本. 对用到的库做下简要介绍,具体请参考官方文档: xpinyin.Pinyin:将输入的中文转成拼音 concur ...

  10. C#基础-面向对象-多态

    多态,不同对象对同一方法的不同实现 使用abstract关键字表示抽象类 // 表示是一个抽象类 public abstract class Animal { private string name; ...