时间:2021-07-01 10:21:17 帮助过:4人阅读
在做项目中遇到了静态资源浏览器缓存更新的问题,于是在网络上寻找解决方案。之前虽然没有解决过这个问题,但方法无非就是为其设定新URI使得浏览器强制更新。这个过程听起来还是相当简单的。
也是无意中搜索到了知乎上的一个帖子 大公司里怎样开发和部署前端代码?
看到这个文章中提到了FIS,跟随着文章开始学习走起,有点小兴奋,只不过很快便发现问题更多。
二、尝试
原本只是想着有个工具可以将前端资源打个标识,这样就可以轻松的解决浏览器静态缓存更新问题。FIS的描述也确实如此,那么就开始动手搞起吧。
安装
FIS是基于Nodejs开发,所以nodejs必须有。装起。。
然后通过npm命令装起, npm install -g fis。结果卡死了。
由于是第一次接触,所以在baidu上找了半天也没找到方案。放弃。。。
发现了官方视频教程,于是花时间看了几集,大概了解到FIS这个工具还是挺简单的。而且解决了前端开发的问题:
1、资源压缩
2、md5戳
3、资源合并
貌似比较有用的功能就这几个。而我最关心的就是md5戳咯。。
md5戳
所谓Md5戳就是这样的:
这些东西官方网站都有提到,就不多说啦。出门左转去这里: https://github.com/fex-team/fis/issues/65
这次好了,安装好了,fis -v
三、遇到问题
装好了后那就开始在项目中用吧,这才发现自己太年轻。。。。。。
1、配置
直接使用fis release -md ../output,好了开始生成与发布。结果完蛋了,不管阿猫阿狗全部js/css/imgs都添加了md5戳。这可就麻烦了,完全不是自己想要的,也就是说直接通过一个工具一键解决加Md5戳的问题太理想了。
那么只好去研究官方的文档,了解具体的配置方式。在FIS中都是通过fis-conf.js这个文件来进行配置。官方例子:
// 设置图片合并的最小间隔 fis.config.set('settings.spriter.csssprites.margin', 20);
// 取消下面的注释开启simple插件,注意需要先进行插件安装 npm install -g fis-postpackager-simple fis.config.set('modules.postpackager', 'simple');
// 取消下面的注释设置打包规则 fis.config.set('pack', { '/pkg/lib.js': [ 'js/lib/jquery.js', 'js/lib/underscore.js', 'js/lib/backbone.js', 'js/lib/backbone.localStorage.js', ], // 取消下面的注释设置CSS打包规则,CSS打包的同时会进行图片合并 '/pkg/aio.css': '**.css' });
// 取消下面的注释可以开启simple对零散资源的自动合并 fis.config.set('settings.postpackager.simple.autoCombine', true); |
fis.config.merge({ roadmap : { path : [ { //所有widget目录下的js文件 reg : 'widget/**.js', //是模块化的js文件(标记为这种值的文件,会进行amd或者闭包包装) isMod : true, //默认依赖lib.js requires : [ 'lib.js' ], //向产出的map.json文件里附加一些信息 extras : { say : '123' }, //编译后产出到 /static/widget/xxx 目录下 release : '/static$&' }, { //所有的js文件 reg : '**.js', //发布到/static/js/xxx目录下 release : '/static/js$&' }, { //所有的ico文件 reg : '**.ico', //发布的时候即使加了--md5参数也不要生成带md5戳的文件 useHash : false, //发布到/static/xxx目录下 release : '/static$&' }, { //所有image目录下的.png,.gif文件 reg : /^\/images\/(.*\.(?:png|gif))/i, //访问这些图片的url是 '/m/xxxx?log_id=123' url : '/m/$1?log_id=123', //发布到/static/pic/xxx目录下 release : '/static/pic/$1' }, { //所有template目录下的.php文件 reg : /^\/template\/(.*\.php)/i, //是类html文件,会进行html语言能力扩展 isHtmlLike : true, //发布为gbk编码文件 charset : 'gbk', //发布到/php/template/xxx目录下 release : '/php/template/$1' }, { //前面规则未匹配到的其他文件 reg : /.*/, //编译的时候不要产出了 release : false } ] } }); |
2、资源定位
所谓资源定位,就是在html/js/css中定位到资源引用,将FIS编绎(生成)过的新资源替换进去。那么其实挺简单的,就像本文最开始说的例子: