• 使用gulp实现版本管理


    版本管理的原因

    我们的项目在浏览器运行时,浏览器会默认自动缓存静态资源,比如js,css等文件,以及图片资源。但是如果我们在二次开发或者优化之后,再次在浏览器打开时,如果这些静态资源的文件名没有变量,浏览器就会默认调用本地的缓存资源,达到提高浏览效率等目的。但是,我们在这些文件中的更改就不会显示出来,那么就无法实现调试优化的目的。
    解决这个问题的办法,就是修改静态资源文件名称,当文件名称发生改变时,浏览器就会再次去服务器拉取资源,重新加载,那就达到了我们的目的

    版本管理的实现办法

    这里我们所使用工具是gulp,利用gulp的插件gulp-rev,gulp-rev-collector来实现版本号
    使用gulp-rev生成随机版本号,然后将所有的带版本号的路径统一放在json文件中
    使用gulp-rev-collector将所有匹配的文件名全部替换成带版本号的文件名。
    

    版本管理的操作步骤

    有node和npm环境
    安装node和npm包环境,这里不做赘述。
    
    初始化项目
    npm init
    
    在当前项目根目录安装gulp
    npm install --save-dev gulp
    
    安装插件
    npm install --save-dev gulp-rev  //版本号生成插件
    npm install --save-dev gulp-rev-collectot  //替换版本号路径插件
    npm install --save-dev gulp-clean  //删除文件插件
    
    修改gulp插件的配置,目的在后边说明,你现在照做就行了,不要问为什么
    具体代码的行数可能会随着版本的更新会有略微几行的差异,但是具体要修改的内容是不会有很大的变化。目前我的gulp-rev插件的版本是7.1.2,gulp-rev-collector的版本是1.2.2
    从根目录依次打开  node_modules--->gulp-rev--->index.js
    找到第144行  manifest[originalFile] = revisionedFile;
       修改为    manifest[originalFile] = originalFile + '?v=' + file.revHash;
       
    从根目录依次打开  node_modules--->gulp-rev-collectot--->index.js
    找到40行   let cleanReplacement =  path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' );
        修改为 let cleanReplacement =  path.basename(json[key]).split('?')[0];
        
    从根目录依次打开  node_modules--->rev-path--->index.js
    找到40行   return filename + '-' + hash + ext;
        修改为 filename + ext;
    
    创建gulp执行文件
    在根目录下创建gulpfile.js文件
    
    在gulpfile.js中引入gulp及插件
    var gulp = require('gulp'),  //引入gulp 
        rev = require('gulp-rev'), //生成版本号
        revCollector = require('gulp-rev-collector'), //替换版本号
        clean = require('gulp-clean'); //清空文件夹
    
    编辑gulp执行任务
    //css文件生成版本号,并将所有的带版本号的文件名统一放入json文件中。
    gulp.task('revCSS',function(){  //gulp.task--定义一个gulp任务;revCSS--定义该任务的名称,起任何名称都可以
        return gulp.src('css/*.css')   //gulp.src--指定要操作文件的路径,我的是css文件夹下的所有后缀名为css的文件
        .pipe(rev())      //定义一个流,将所有匹配到的文件名全部生成相应的版本号
        .pipe(rev.manifest()) //把所有生成的带版本号的文件名保存到json文件中
        .pipe(gulp.dest('dist/rev/css')  //把json文件保存到指定的路径,自己记住就好
    })
    
    
    //js文件生成版本号,并将所有的带版本号的文件名统一放入json文件中。
    gulp.task('revJs',function(){
    	return gulp.src('js/*.js')
        .pipe(rev())
        .pipe(rev.manifest())
        .pipe(gulp.dest('dist/rev/js'));
    })
    
    
    以上步骤完成后,你就可以打开'dist/rev'中的json文件,看看所有需要的版本信息,已经生成并且一一对应好了。接下来就是替换的步骤了。
    gulp.task('revProduct',function(){   
    	return gulp.src(['dist/rev/**/*.json','dist/products/*.html'])
    	.pipe(revCollector())
    	.pipe(gulp.dest('dist/products')); //html更换css,js文件版本,更改完成之后保存的地址
    })
    这里需要进行一些解释。
    gulp.src的括号内,有个数组,有两个参数,
    第一个是生成的json文件的路径,我这里将所有的json文件,js和css,都选中
    第二个是要替换css,js文件(路径)的HTML文件
    那么这里我们完成的就是讲所有HTML文件中的js,css文件引入路径全部替换成带版本号的路径。
    
    至此我们的任务已经基本完成了。
    在浏览器打开项目,是不是我们所有的静态文件路径都已经带上的版本号呢?
    

    现在来解释上边的修改插件配置的原因及作用

    我们现在常见的网站的版本管理的版本号  都是这样的'js/index.js?v=1a1fa1s55d'
    而我们目前实现的版本号,也是这样的。
    如果我们不修改配置文件的话,会是什么样的效果呢 'js/index-a5df1f5g9g.js',显然这样是不行的啦。
    

    使用gulp进行版本管理到这里就结束啦,自己也是初次尝试,欢迎大神大神来喷,有漏洞或者不完善的地方,大家多提意见。

    代码的世界水太深,潜行的心态很纯真!
  • 相关阅读:
    UFLDL深度学习笔记 (四)用于分类的深度网络
    UFLDL深度学习笔记 (三)无监督特征学习
    UFLDL深度学习笔记 (二)SoftMax 回归(矩阵化推导)
    UFLDL深度学习笔记 (一)反向传播与稀疏自编码
    【2016内推】计算机找工作面经
    关于最优化中的若干问题
    关于extern "C" 的用法
    浅谈多核CPU、多线程、多进程
    并发与并行
    多进程与多线程
  • 原文地址:https://www.cnblogs.com/Q-zhangsan/p/6961762.html
Copyright © 2020-2023  润新知