gulp 自动化压缩并且给资源新增版本号

2018-07-07  本文已影响0人  每日需要维生素

公司用的gulp,由于每次修改js或者css之后会有缓存的问题,所以就想用gulp去自动给修改过得文件加上一个版本号,在网上看了很多文章,但是由于gulp的版本不一样,所以报了一些错,以下是自己配置成功的经验(已经在使用这一功能),现在把我的经验分享给大家。

<link rel="stylesheet" href="lib/css/main/login.css?v=84f768fdbf">
<script src="lib/js/main/login.js?v=14a0b4142d"></script>

1、打开npm安装插件
npm install gulp-rev --save-dev //对文件名加后缀
npm install gulp-rev-collector --save-dev //路径替换
2、修改配置文件中的js
      原因是,如果不修改,则每次文件会这样:
       <link rel="stylesheet" href="lib/css/main/login.css?v=84f7dsfsd56?v=84f768fdbf">
      1.打开node_modules,将gulp-rev下的index.js打开,
         第135行将manifest[originalFile] = revisionedFile; 
          修改为 manifest[originalFile] = originalFile + '?v=' + file.revHash;
image.png
      2.打开文件夹gulp-rev-collector下的index.js,
        第174行,将regexp: new RegExp( prefixDelim + pattern , 'g' ),
        改为 regexp: new RegExp( prefixDelim + pattern + '(\\?v=\\w{10})?' , 'g' ),
image.png
      3.打开rev-path文件夹下的index.js
        第10行,将return modifyFilename(pth, (filename, ext) => `${filename}-${hash}${ext}`);
        改为 return modifyFilename(pth, (filename, ext) => `${filename}${ext}`);
image.png
     tips: 以上node_modules 、gulp-rev-collector  、rev-path都在同一目录下,行数可能不太一样,自己看着改,我的版本是
      "gulp-rev": "^8.1.1"   ,   "gulp-rev-collector": "^1.3.1",


3、gulpfile.js的配置
    //配置css
gulp.task('revCss',function(){
    return gulp.src('src/static/lib/css/main/login.css')  // 我本地的css文件
    .pipe(minCss())    // 将css压缩处理成一行
       .pipe(rev())   // 文件名加后缀
       .pipe(gulp.dest('static/lib/css/main/')) // 生成到线上环境的文件夹下
       .pipe(rev.manifest())   // 生成一个rev-manifest.json,
      .pipe(gulp.dest('rev/css'));  // 将rev-manifest.json保存到rev下的css问价夹(你也可自定路径和名字)
});

// 配置js
gulp.task('revJs',function(){
    return gulp.src(['src/static/lib/js/aftersaleManagement/serviceManagement/service_type.js'])
    .pipe(rev())
    .pipe(gulp.dest("static/lib/js/aftersaleManagement/serviceManagement/"))
    .pipe(rev.manifest())
    .pipe(gulp.dest('rev/js'));
 });

// 在html中 给js css路径后面加后缀
gulp.task('revHtml', function () {
    return gulp.src(['rev/**/*.json', 
   'src/templates/aftersaleManagement/serviceManagement/service_type.html'])  /* 本地html文件的路径*/        
    .pipe(htmlmin(options))
    .on('error', function(err) {
        // 错误提示
        gutil.log('Some Error!', err);
        this.end();
    })
   .pipe(revCollector())        
   .pipe(gulp.dest('templates/aftersaleManagement/serviceManagement/'));  /* 目标地址 */
 });

  gulp.task('dev', function (done) {   
     condition = false;   
    runSequence(
    ['revCss'],
    ['revJs'],
    ['revHtml'], 
    done);
  });

gulp.task('default', ['dev']);


最后运行 gulp default 即可将本地的文件压缩之后,覆盖到目标文件中去,其中加了版本号的html已经被打包到目标文件中了,
image.png
    如果在运行 gulp default时有报错,可能是你缺少模块,比如我报的错是 ev 百度之后发现缺少 babel-preset-env 模块,遂安装之即可 npm install --save-dev babel-preset-env
上一篇下一篇

猜你喜欢

热点阅读