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(‘?‘)[0] !== path.basename(key) ) {

目录结构:

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"
}

最终效果:

都已加上版本号:

参考 http://www.cnblogs.com/givebest/p/4707432.html

时间: 2024-08-02 12:24:00

gulp批量添加版本号的相关文章

Gulp自动添加版本号

转载自:http://www.cnblogs.com/givebest/ 推荐使用gulp-rev + gulp-rev-collector是比较方便的方法,结果如下: "/css/style.css" => "/dist/css/style-1d87bebe.css" "/js/script1.js" => "/dist/script1-61e0be79.js" "cdn/image.gif"

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

1.打开node_modules\gulp-rev\index.js 第144行 manifest[originalFile] = revisionedFile; 更新为: manifest[originalFile] = originalFile + '?v=' + file.revHash; 2.打开node_modules\gulp-rev\nodemodules\rev-path\index.js 10行 return filename + '-' + hash + ext; 更新为:

gulp自动化打包及静态文件自动添加版本号

前端自动化打包发布已是一种常态,尤其在移动端,测试过程中静态资源的缓存是件很头疼的事情,有时候明明处理的bug测试还是存在,其实就是缓存惹的祸,手机不比pc浏览器,清理缓存还是有点麻烦的.所以自动化实现静态资源的版本更新才是正道. 实际开发过程中,我们常用到的功能包括: 1.目标路径的清除: 2.静态资源复制到目标路径: 3.css文件的合并与压缩: 4.js文件的合并与压缩: 5.根据文件的变化添加版本号: 第1.2.3.4几个功能倒是很好解决,今天主要说说gulp实现静态资源自动添加版本号:

通过gulp为requireJs引入的模块添加版本号

由于项目用到requireJs,并且通过gulp来对项目进行统一的管理,为了防止浏览器对文件进行缓存,所以通过gulp为项目中的文件添加版本号. 1.分别安装gulp-rev.gulp-rev-collerctor npm install --save-dev gulp-rev npm install --save-dev gulp-rev-collector 打包后的效果 "/css/style.css" => "/dist/css/style-1d87bebe.cs

微信jssdk批量添加卡券接口

1)首先是官方接口文档: 1.批量添加卡券接口:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.08619731531288366&token=&lang=zh_CN#wxkq3 : 2.卡券扩展字段cardExt说明:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.08619731531288366&t

Lync Server 2010批量添加联系人并同步联系人

最近一直帮助朋友整理Lync Server 2010,总是听他抱怨说微软的Lync不能实现组织结构等方面的联系人列表,其实也不完全没办法实现,早在OCS的年代,OCS利用Restkit tool工具进行添加联系人列表,而到了Lync的时代虽然Restkit Tool工具还在,但是已然无法利用之前的方式进行批量添加联系人了,在网上有人表示利用LyncAddContacts.vbs这个工具进行批量添加,但是所有的文章只是把国外这个作者的写的东西照抄过来并且翻译一下就成为原创发布到网络上,本人觉得现在

struts2文件上传(单文件/批量添加)

单文件上传 1.导入上传需要jar包 2.建立UploadAction file是jsp页面的输入项的name相同,后面的两个属性的名称也是有规律的:(inputName+FileName/ContentType) 1 public class UploadAction extends ActionSupport{ 2 3 private static final long serialVersionUID = 1L; 4 private File file;//上传文件的本身 5 privat

利用shell实现批量添加用户

批量添加用户并设置随机密码,把添加的用户的名字和密码保存到文件中. [[email protected] scripts]# cat user.sh #!/bin/sh for i in `seq -w 10` do pass=$(echo "`date`$RANDOM"|md5sum|cut -c 1-8) //取随机数的方法是date结果和random随机数拼接并计算md5值取前8位 useradd kg$i echo "$pass"|passwd --stdi

解决JavaScript中批量添加事件的问题

这是JavaScript中一个老生常谈的问题,也是初学者较难理解的问题.当给一系列元素添加事件时,常常会出现一些我们不希望出现的问题.例如以下代码: //给li元素批量添加click事件 window.onload = function(){ var lists = document.getElementsByTagName("li"); for(var i=0;i<lists.length;i++){ lists[i].onclick = function(){ alert(i