当前位置:Gxlcms > html代码 > F.I.S初探(前端工程化)_html/css_WEB-ITnose

F.I.S初探(前端工程化)_html/css_WEB-ITnose

时间:2021-07-01 10:21:17 帮助过:4人阅读

一、初识FIS

在做项目中遇到了静态资源浏览器缓存更新的问题,于是在网络上寻找解决方案。之前虽然没有解决过这个问题,但方法无非就是为其设定新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

}

]

}

});

这里面我目前用的最多的是roadmap,感觉这是个核心设置。

2、资源定位

所谓资源定位,就是在html/js/css中定位到资源引用,将FIS编绎(生成)过的新资源替换进去。那么其实挺简单的,就像本文最开始说的例子: