Fis3项目


项目目录结构:

  1. E:.
  2. .gitignore
  3. fis-conf.js
  4. index.html
  5. package.json
  6. README.md

  7. ├─material

  8. └─resource
  9. ├─css
  10. ├─images
  11. └─js
  12. ├─lab

  13. └─until
  14. └─ui

项目要求:

1.雪碧图

2.代码模块化

3.预处理

4.md5戳

5.压缩资源

雪碧图


启用雪碧图插件,fis3已内置

  1. fis.match('::package', {
  2. spriter: fis.plugin('csssprites')
  3. })

设置雪碧图的合并格式

  1. fis.config.set('settings.spriter.csssprites', {
  2. margin: 10, //图之间的边距
  3. layout: 'matrix' //使用矩阵排列方式,默认为线性`linear`
  4. });

预处理


因为使用的是less,所以需要预处理less文件

通过fis-parser-less插件可以处理

安装npm install -g fis-parser-less

  1. fis.match('*.less', {
  2. parser: fis.plugin('less'),
  3. rExt: '.css'
  4. })

代码模块化


Mod.js

我这里使用的Mode.js,这个百度开发的一个独立的模块化库。

包裹JS

除了mode.js以外我们还需要npm install -g fis-hook-commonjs来安装一个模块化"包裹"库。

它的作用就是将我们的js代码外面包裹一层,比如我们常用的:jquery.lazyload

通过fis-hook-commonjs包裹后:

  1. define('resource/js/lab/jquery.lazyload', function(require, exports, module) {
  2. //jquery.lazyload代码
  3. });

然后通过require('resource/js/lab/jquery.lazyload')这种形式就可以加载我们需要的库了。

设置是否包裹

当然这里我们可以通过fis-conf.js来控制需要包裹的js。

  1. //指定目录文件进行define包裹
  2. fis.match('/resource/js/lab/**.js', {
  3. isMod: true
  4. })

通过isMode这个属性即可,true意为包裹,false意为不包裹。

添加别名(谨慎使用)

当然常用的jquery的话,我们可以通过下面这种设置来添加别名等。

  1. fis.hook('commonjs')
  2. .match('/resource/js/lab/jquery.js', {
  3. id: 'jquery'
  4. })

调用var $=require('jquery')

控制打包顺序

  1. //设置mod.js的优先级在打包文件的第一位
  2. fis.match('/resource/js/lab/mod.js', {
  3. packOrder: -100
  4. })

这里是通过packOrder来处理打包的顺序,值越小打包越靠前。-100比-99靠前。

资源合并

资源合并是我们常用的功能,这里我通过安装npm install fis3-postpackager-loader这个库来处理静态文件文件的资源配置。

他会对页面的js,css进行扫描,处理我们需要的文件。

比如我们不想将jquery文件合并,我们可以在html页面中这么处理。

  1. <script type="text/javascript" src="../resource/js/lab/until/interactive.js"></script><!--ignore-->

添加<!--ignore-->这个标记即可。

这样页面的这个文件就不会被处理了。

启用fis3-postpackager-loader

  1. fis.match('::package', {
  2. postpackager: fis.plugin('loader')
  3. });

我们的html文件会引入多个js,css。这样的话我们会将他们合并成单个文件,提高性能。

  1. <script type="text/javascript" src="../resource/js/lab/until/interactive.js"></script>
  2. <script type="text/javascript" src="../resource/js/lab/until/tabchange.js"></script>
  3. <script type="text/javascript" src="../resource/js/ui/swip.js"></script>
  4. <script type="text/javascript" src="../resource/js/ui/tab.js"></script>
  5. <script type="text/javascript" src="../resource/js/ui/main.js"></script>

通过下面配置处理

  1. //静态资源加载器配置 npm install fis3-postpackager-loader
  2. //不想加载的引入资源使用<!--ignore-->标记
  3. //合并页面js
  4. //不进行任何配置 css,js的合并使用fis的pack
  5. fis.match('::package', {
  6. postpackager: fis.plugin('loader')
  7. });
  8. //对合并的aio.css进行处理 打包的会自动进行csssprites
  9. fis.config.set('pack', {
  10. '/static/js/index_aio.js': [
  11. '**.js'
  12. ],
  13. '/static/css/index_aio.css': [
  14. '**.css',
  15. '**.less'
  16. ]
  17. });

这样处理打包后的static目录下情况:

  1. ├─css
  2. index_aio.css
  3. index_aio_z.png

  4. └─js
  5. index_aio.js

md5戳


给js,css添加md5戳,使用useHash

  1. fis.media('prod')
  2. .match('/static/**.{css,js}', {
  3. useHash: true
  4. })

压缩资源


  1. fis.media('prod')
  2. .match('/resource/**.js', {
  3. optimizer: fis.plugin('uglify-js')
  4. })
  5. .match('/resource/**.{css,less}', {
  6. optimizer: fis.plugin('clean-css')
  7. })
  8. .match('/static/**.png', {
  9. optimizer: fis.plugin('png-compressor')
  10. })

将js,css,png进行压缩。压缩器fis3已内置,不需要安装库。

最后


注意fis3的配置文件中的操作顺序会影响你需要的结果

Fis3前端工程化之项目实战的更多相关文章

  1. Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  2. 妙味WEB前端开发全套视频教程+项目实战+移动端开发(99G)

    一共99GB的视频教程,全部存于百度网盘中,13个栏目,每个栏目里还划分有独立的小栏目 最基本的web前端学习介绍,到项目实战,再到移动端的开发,真正彻底掌握前端开发的精髓: 视频教程在线预览:(百度 ...

  3. angularJs项目实战!02:前端的页面分解与组装

    自从上一篇文章到现在已经有将近一个月的时间,我将精力放在了前端页面分解与组装,和angularjs如何与jquery.bootstrap.D3等一系列其他类库结合使用的经验总结上.由于公司新招了一些员 ...

  4. Python Django CMDB项目实战之-3创建form表单,并在前端页面上展示

    基于之前的项目代码 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页.index页.文章页面 Python Django CMDB项目实战之-2创建APP. ...

  5. Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据

    基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...

  6. Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客

    Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...

  7. 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 ...

  8. 前端开发工程师 - 06.Mini项目实战 - 项目简介

    第6章--Mini项目实战 项目简介 Mini项目简介-Ego社区开发 回顾: 页面制作 页面架构 JavaScript程序设计 DOM编程艺术 产品前端架构 实践课Mini项目--Ego: 主题:漫 ...

  9. 强烈推荐 GitHub 上值得前端学习的开源实战项目

    强烈推荐 GitHub 上值得前端学习的开源实战项目. Vue.js vue-element-admin 是一个后台前端解决方案,它基于和 element-ui 实现 基于 iView 的 Vue 2 ...

随机推荐

  1. java中的锁

    java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...

  2. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

  3. 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密

    0x00 前言 在匹夫的上一篇文章<匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置>的最后,匹夫以总结和后记的方式涉及到一部分迭代器的知识.但是觉得还是不够过瘾,很多需要说清楚 ...

  4. C语言 · 最大值与最小值计算

    输入11个整数,计算它们的最大值和最小值. 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输出 10 0   #include<stdio.h> int main(){ ]; ...

  5. ajax

    常见的HTTP状态码状态码:200 请求成功.一般用于GET和POST方法 OK301 资源移动.所请求资源移动到新的URL,浏览器自动跳转到新的URL Moved Permanently304 未修 ...

  6. JAVA问题集锦Ⅰ

    1.Java的日期添加: import java.util.Date ; date=new date();//取时间 Calendar calendar = new GregorianCalendar ...

  7. springmvc+mybatis+spring 整合 bootstrap html5

    A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技 ...

  8. css样式之border-image

    border-image-source 属性设置边框的图片的路径[none | <image>] div { border: 20px solid #000; border-image-s ...

  9. github免输用户名/密码SSH登录的配置

    从github上获取的,自己整理了下,以备后用. Generating an SSH key mac windows SSH keys are a way to identify trusted co ...

  10. ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项(红字需要留意)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...