美文网首页
gulp插件-gulp-rev和gulp-rev-collect

gulp插件-gulp-rev和gulp-rev-collect

作者: 胖太_91bf | 来源:发表于2017-12-19 15:47 被阅读0次

1.gulp-rev: 为静态文件随机添加一串hash值, 解决cdn缓存问题, a.css --> a-d2f3f35d3.css
API:
rev.manifest.json: 生成源文件和添加hash后文件的映射

安装: npm install --save-dev gulp-rev

使用:
var gulp = require('gulp')
var rev = require('gulp-rev')

gulp.task('rev', function(){
    gulp.src('src/*.css')
          .pipe(rev())//添加hash后缀
          .pipe(gulp.dest('dist/css'))//移动到dist/css
          .pipe(rev.manifest())//生成文件映射
          .pipe(gulp.dest('rev/css'))//将映射文件导出到rev/css
})

gulp-rev插件只能添加后缀, 不能讲html里的路径替换, 如果想要替换路径, 就需要gulp-rev-collector

2.gulp-rev-collector: 根据rev生成的manifest.json文件中的映射, 去替换文件名称, 也可以替换路径

安装: npm install --save-dev gulp-run-collector

使用:
var gulp = require('gulp');
var rev = require('gulp-rev');
var revCollector = require('gulp-rev-collector');
var runSequence = require('run-sequence');
var clean = require('gulp-clean')

gulp.task('css', function() {
    return gulp.src('src/css/*.css')
        .pipe(rev())
        .pipe(gulp.dest('dist/css'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('rev/css'));
});

gulp.task('js', function() {
    return gulp.src('src/js/*.js')
        .pipe(rev())
        .pipe(gulp.dest('dist/js'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('rev/js'));
});

gulp.task('rev', function() {
    return gulp.src(['rev/**/*.json', 'src/app/*.html'])
        .pipe(revCollector({
            replaceReved: true,//允许替换, 已经被替换过的文件
            dirReplacements: {
                'css': '/dist/css',
                'js': '/dist/js'
            }
        }))
        .pipe(gulp.dest('dist'));
});

gulp.task('clean', function(){
    return gulp.src(['dist', 'rev'])
        .pipe(clean());
});
gulp.task('build', function(cb) {
    runSequence('clean', ['css', 'js'], 'rev', cb);
});

对插件源码做一些小的修改, 就可以将a-5da2910089.css模式转变成更加方便的-5da2910089模式

第一步: 进入/node_modules/gulp-rev/index.js修改代码:
将return through.obj((file, enc, cb) => {
        // Ignore all non-rev'd files
        if (!file.path || !file.revOrigPath) {
            cb();
            return;
        }

        const revisionedFile = relPath(path.resolve(file.cwd, file.base), path.resolve(file.cwd, file.path));
        const originalFile = path.join(path.dirname(revisionedFile), path.basename(file.revOrigPath)).replace(/\\/g, '/');

        manifest[originalFile] = revisionedFile;//这段删除
                manifest[originalFile] = originalFile + '?v=' + file.revHash;//这段添加
        cb();
    }


第二步: 进入/node_modules/rev-path/index.js修改代码:
将第一个函数中的:return modifyFilename(pth, (filename, ext) => `${filename}-${hash}${ext}`); 里边的-${hash}删掉;
将第一个函数中的:return modifyFilename(pth, (filename, ext) => filename.replace(new RegExp(`-${hash}$`), '')  + ext); 里边的.replace(new RegExp(`-${hash}$`), '') 删掉;

第三步: 进入/node_modules/gulp-rev-collector/index.js修改代码:(更改两处)
1) 140 和 160行
      // regexp: new RegExp(  dirRule.dirRX + pattern, 'g' ),//删除这段
      regexp: new RegExp( dirRule.dirRX  + pattern+'(\\?v=\\w{10})?', 'g' ),//添加这段
 // regexp: new RegExp( prefixDelim + pattern, 'g' ),//删除这段
  regexp: new RegExp( prefixDelim + pattern + '(\\?v=\\w{10})?', 'g' ),//添加这段

2)  40行
   // var cleanReplacement =  path.basename(json[key]).replace(new RegExp(   opts.revSuffix ), '' );//删除
    var cleanReplacement = path.basename(json[key]).split('?')[0];//添加
    
    
                           

相关文章

  • gulp插件-gulp-rev和gulp-rev-collect

    1.gulp-rev: 为静态文件随机添加一串hash值, 解决cdn缓存问题, a.css --> a-d2f3...

  • gulp 工程化学习

    1、基于gulp-rev + gulp-rev-collector根据文件MD5值自动添加版本号:https://...

  • gulp插件解决浏览器缓存问题

    一、前言 有些简单前端小项目,不需要涉及框架,前端打包压缩的话本妹子还是喜欢用gulp。本文将用gulp-rev和...

  • gulp压缩合并文件

    gulp压缩合并文件流程 //引入gulp和gulp插件var gulp = require('gulp');va...

  • gulp@3.9.1“静态资源版本管理”

    gulpfile.js文件 修改映射表中 属性值的格式 打开node_modules\gulp-rev\index...

  • 编写gulp插件

    本章讲解如何编写gulp插件,这里通过实现一个简单的插件功能来一步步讲解如何编写gulp插件。 gulp插件结构 ...

  • gulp的简单使用

    gulp使用流程:安装nodejs -> 全局安装gulp -> 项目安装gulp以及gulp插件 -> 配置gu...

  • gulp之插件、监控、api使用

    一、gulp插件的使用 |--插件的实质:gulp插件的实质是Node转换流,它封装了-通过管道(pipeli...

  • gulp入门

    安装gulp 安装gulp插件 gulp使用与执行 在目录创建gulpfile.js文件 执行:gulp defa...

  • gulp 配置及插件体系

    gulp 配置及插件体系 gulp-autoprefixer 的browsers参数详解 (传送门): gulp...

网友评论

      本文标题:gulp插件-gulp-rev和gulp-rev-collect

      本文链接:https://www.haomeiwen.com/subject/txnbwxtx.html