要实现的理想效果:

"/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. 不同编程语言在发生stackoverflow之前支持的调用栈最大嵌套层数

    今天我的一位同事在微信群里发了一张图片,勾起了我的好奇心:不同编程语言支持的函数递归调用的最大嵌套层数是? Java 1.8 private static void recur(int i){ Sys ...

  2. MSD_radix_sort

    一.这次是在上一次尝试基础上进行的,预期是达到上次性能的9倍. MSD的基本手法就是不断切片.每一步都是把整体数据切割成256片,如上图所示,实际情况切片未必均匀,有的slice内可能一个元素也没有. ...

  3. 使用Python命令创建jenkins的job

    目的:通过调用jenkins的命令,动态创建jenkins的job 如何使用,使用Python的脚本,更多API可以进入到官网去查看,http://jenkinsapi.readthedocs.io/ ...

  4. POJ-2002 Squares---绕点旋转+Hash

    题目链接: https://vjudge.net/problem/POJ-2002 题目大意: 有一堆平面散点集,任取四个点,求能组成正方形的不同组合方式有多少. 相同的四个点,不同顺序构成的正方形视 ...

  5. ABI and compiler

    http://stackoverflow.com/questions/2171177/what-is-application-binary-interface-abi ABIs cover detai ...

  6. this指针和类的继承

    神秘的家伙 在对象的世界里,有一个特殊的指针,它叫做this.我们从来没有见过他,但是他却从来都存在.我们通过一个典型的例子来认识它: class Human { char fishc; Human( ...

  7. 物流管理系统(数据库+后台+springMVC+Mybatis+layui)

    数据库:mysql create database WBG_logistics; use WBG_logistics; #1管理员表 create table admin( a_id int prim ...

  8. hadoop中compare函数

    在看hadoop  的二次排序的时候,改写了下, 加了第三个参数,  本来以为是在 public int compareTo(IntPair o) { System.out.println(" ...

  9. 旧文备份:VC中嵌入NASM编写的汇编函数

    在公司开发的RT下没法使用C库,并且替代库函数没有几个,需要用到setjmp和longjmp函数,没办法,只能自己想办法了,上sourceforge淘换到一个小日本的工程,提供这两个函数的替代源码,名 ...

  10. 在centos7云服务器上搭建Apache服务器并访问到你的网站

    使用X-shell ssh安全连接到云服务器 https://mail.qq.com/cgi-bin/mail_spam?action=check_link&url=https://www.n ...