gulp批量添加版本号

Posted 觉信

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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) ) {

注:修改完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(\'?\')[0];

 

 

目录结构:

 

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自动化打包合并前端静态资源(CSSJS文件压缩添加版本号)

gulp教程之自动添加版本号

Gulp自动添加版本号

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

gulp 添加版本号 解决浏览器缓存问题

Gulp自动添加版本号