Fis3前端工程化之项目实战
Fis3项目
项目目录结构:
E:.
│ .gitignore
│ fis-conf.js
│ index.html
│ package.json
│ README.md
│
├─material
│
└─resource
├─css
├─images
└─js
├─lab
│ │
│ └─until
└─ui
项目要求:
1.雪碧图
2.代码模块化
3.预处理
4.md5戳
5.压缩资源
雪碧图
启用雪碧图插件,fis3已内置
fis.match('::package', {
spriter: fis.plugin('csssprites')
})
设置雪碧图的合并格式
fis.config.set('settings.spriter.csssprites', {
margin: 10, //图之间的边距
layout: 'matrix' //使用矩阵排列方式,默认为线性`linear`
});
预处理
因为使用的是less,所以需要预处理less文件
通过fis-parser-less插件可以处理
安装npm install -g fis-parser-less
fis.match('*.less', {
parser: fis.plugin('less'),
rExt: '.css'
})
代码模块化
Mod.js
我这里使用的Mode.js,这个百度开发的一个独立的模块化库。
包裹JS
除了mode.js以外我们还需要npm install -g fis-hook-commonjs来安装一个模块化"包裹"库。
它的作用就是将我们的js代码外面包裹一层,比如我们常用的:jquery.lazyload
通过fis-hook-commonjs包裹后:
define('resource/js/lab/jquery.lazyload', function(require, exports, module) {
//jquery.lazyload代码
});
然后通过require('resource/js/lab/jquery.lazyload')这种形式就可以加载我们需要的库了。
设置是否包裹
当然这里我们可以通过fis-conf.js来控制需要包裹的js。
//指定目录文件进行define包裹
fis.match('/resource/js/lab/**.js', {
isMod: true
})
通过isMode这个属性即可,true意为包裹,false意为不包裹。
添加别名(谨慎使用)
当然常用的jquery的话,我们可以通过下面这种设置来添加别名等。
fis.hook('commonjs')
.match('/resource/js/lab/jquery.js', {
id: 'jquery'
})
调用var $=require('jquery')
控制打包顺序
//设置mod.js的优先级在打包文件的第一位
fis.match('/resource/js/lab/mod.js', {
packOrder: -100
})
这里是通过packOrder来处理打包的顺序,值越小打包越靠前。-100比-99靠前。
资源合并
资源合并是我们常用的功能,这里我通过安装npm install fis3-postpackager-loader这个库来处理静态文件文件的资源配置。
他会对页面的js,css进行扫描,处理我们需要的文件。
比如我们不想将jquery文件合并,我们可以在html页面中这么处理。
<script type="text/javascript" src="../resource/js/lab/until/interactive.js"></script><!--ignore-->
添加<!--ignore-->这个标记即可。
这样页面的这个文件就不会被处理了。
启用fis3-postpackager-loader
fis.match('::package', {
postpackager: fis.plugin('loader')
});
我们的html文件会引入多个js,css。这样的话我们会将他们合并成单个文件,提高性能。
<script type="text/javascript" src="../resource/js/lab/until/interactive.js"></script>
<script type="text/javascript" src="../resource/js/lab/until/tabchange.js"></script>
<script type="text/javascript" src="../resource/js/ui/swip.js"></script>
<script type="text/javascript" src="../resource/js/ui/tab.js"></script>
<script type="text/javascript" src="../resource/js/ui/main.js"></script>
通过下面配置处理
//静态资源加载器配置 npm install fis3-postpackager-loader
//不想加载的引入资源使用<!--ignore-->标记
//合并页面js
//不进行任何配置 css,js的合并使用fis的pack
fis.match('::package', {
postpackager: fis.plugin('loader')
});
//对合并的aio.css进行处理 打包的会自动进行csssprites
fis.config.set('pack', {
'/static/js/index_aio.js': [
'**.js'
],
'/static/css/index_aio.css': [
'**.css',
'**.less'
]
});
这样处理打包后的static目录下情况:
├─css
│ index_aio.css
│ index_aio_z.png
│
└─js
index_aio.js
md5戳
给js,css添加md5戳,使用useHash
fis.media('prod')
.match('/static/**.{css,js}', {
useHash: true
})
压缩资源
fis.media('prod')
.match('/resource/**.js', {
optimizer: fis.plugin('uglify-js')
})
.match('/resource/**.{css,less}', {
optimizer: fis.plugin('clean-css')
})
.match('/static/**.png', {
optimizer: fis.plugin('png-compressor')
})
将js,css,png进行压缩。压缩器fis3已内置,不需要安装库。
最后
注意fis3的配置文件中的操作顺序会影响你需要的结果
Fis3前端工程化之项目实战的更多相关文章
- Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- 妙味WEB前端开发全套视频教程+项目实战+移动端开发(99G)
一共99GB的视频教程,全部存于百度网盘中,13个栏目,每个栏目里还划分有独立的小栏目 最基本的web前端学习介绍,到项目实战,再到移动端的开发,真正彻底掌握前端开发的精髓: 视频教程在线预览:(百度 ...
- angularJs项目实战!02:前端的页面分解与组装
自从上一篇文章到现在已经有将近一个月的时间,我将精力放在了前端页面分解与组装,和angularjs如何与jquery.bootstrap.D3等一系列其他类库结合使用的经验总结上.由于公司新招了一些员 ...
- Python Django CMDB项目实战之-3创建form表单,并在前端页面上展示
基于之前的项目代码 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页.index页.文章页面 Python Django CMDB项目实战之-2创建APP. ...
- Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据
基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...
- Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客
Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...
- Asp.Net Core 2.0 项目实战(3)NCMVC角色权限管理前端UI预览及下载
Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...
- 前端开发工程师 - 06.Mini项目实战 - 项目简介
第6章--Mini项目实战 项目简介 Mini项目简介-Ego社区开发 回顾: 页面制作 页面架构 JavaScript程序设计 DOM编程艺术 产品前端架构 实践课Mini项目--Ego: 主题:漫 ...
- 强烈推荐 GitHub 上值得前端学习的开源实战项目
强烈推荐 GitHub 上值得前端学习的开源实战项目. Vue.js vue-element-admin 是一个后台前端解决方案,它基于和 element-ui 实现 基于 iView 的 Vue 2 ...
随机推荐
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架
前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...
- Hawk 6. 编译和扩展开发
Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以 ...
- 在开启DRS的集群中修复VMware虚拟主机启动问题
通过iSCSI方式连接到ESXi主机上的外挂存储意外失联了一段时间,导致部分虚拟主机在集群中呈现出孤立的状态,单独登陆到每台ESXi上可以看到这些虚拟主机都变成了unknow状态.因为有过上一次(VM ...
- 《你不知道的JavaScript》整理(四)——原型
一.[[Prototype]] JavaScript中的对象有一个特殊的[[Prototype]]内置属性,其实就是对于其他对象的引用. var myObject = { a: 2 }; myObje ...
- 在centos7上安装ClamAV杀毒,并杀毒(centos随机英文10字母)成功
前言 上传文件的时候发现总是失败,查看top发现有个进程一直cpu占用80%以上,而且名称还是随机数.kill之后,一会儿又重新生成了.突然发现居然没有在服务端杀毒的经历.在此处补齐. 安装clama ...
- 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议126~128)
建议126:适时选择不同的线程池来实现 Java的线程池实现从根本上来说只有两个:ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,这两个类还是父子关系 ...
- 如何解决流程开发中SheetRadioButtonList页面取值问题
分享一个常见的取值问题. 应用场景: SheetRadioButtonList控件,点击其中一项执行事件操作.如果是页面加载的情况下,值就无法取到. 具体原因如下: 我给SheetRadioButto ...
- SuperMap-iServer-单点登录功能验证(CAS)
SuperMap-iServer-单点登录功能验证(CAS) 1.测试目的: 验证SuperMap-iServer使用CAS单点登录的功能是否正常. 2.测试环境: SuperMap-iServer8 ...