FEZ前端模块化工程开发框架

FEZ

FEZ 是面向前端模块化工程的开发框架。主要目的是统一前端开发模式和项目开发结构,自动化前端工作流,提高开发效率和开发质量。使用持续集成等软件工程的架构模式,集成众多业界先进的解决方案,让研发人员更专注于业务逻辑的实现。核心包括功能模块化、结构规范化、及开发自动化。

FEZ倡导的前端开发理念

  • 采用响应式界面布局,一份代码各种终端设备兼容,自动适配PC端、手机端、PAD端、及各种大小的屏幕,并可以嵌入任何APP中使用。为产品的多元化几何倍的提高开发效率,极大降低多平台项目的开发成本。
  • 模块化/组件化开发,将复杂的系统细分为模块,分治管理,并有统一的文件结构,兼顾模块的通用和复用原则,极大提高项目的功能扩展和可维护性。
  • 积木式、组件化快速构建页面,使用API接口/Mock数据前后端分离、并在流程上让设计、前端、后端、测试团队并行工作,极大提高团队研发效率。
  • 使用国际前沿的工程自动化技术解决项目复杂的资源管理和大量重复的代码编译工作。

FEZ使用场景

  • 【一份代码支持多终端响应式WEB应用】参考示例:fez-demo-handlebars
  • 【基于Vue的高性能大中型WEB应用】参考示例:fez-demo-vue
  • 【基于React的高性能大中型WEB应用】参考示例:fez-demo-react
  • 【高性能移动端混合APP及H5应用】参考示例:fez-demo-framework7
  • 【快速构建中小型官方网站、活动、专题、宣传页面】参考示例:fez-demo-75team fez-web
  • 【网页中显示艺术/特殊字体的官网网站、活动专题】参考示例:fez-demo-fontmin

FEZ核心特性

功能模块化

FEZ 支持使用ES6 Module来组织前端代码,支持使用ES5/ES6/ES7等标准特性开发项目,通过Babel编译完美运行在浏览器中。可以整合如Vue、React等MVVM框架实现单文件组件形式的高效开发体验。

模块化是一种处理复杂系统分解为更好的可管理模块的方式。每个模块完成一个特定的子功能,所有的模块再进行统一的拼装和加载,成为一个整体,完成整个系统所要求的功能。 有关模块化的更多知识请参考:【github.com/fouber/blog】【www.zhihu.com/question/37…】

结构规范化

FEZ 将复杂的系统划分为功能页面(组件),将复杂的页面(组件)划分为若干个模块,将模块分为:获取数据、渲染显示、交互操作,并且都有统一的文件结构。

统一的项目开发结构

.
├── fez.config.js
├── gulpfile.babel.js
├── package.json
└── src├── lib├── static│   ├── fonts│   ├── images│   └── styles│       ├── page1.scss│       └── page2.scss└── views├── page1│   ├── index.html│   ├── index.js│   ├── service.js│   └── module│         ├── mod1│         │    └── index.js│         └── mod2│              └── index.js├── page2│   ├── index.html│   ├── index.js│   └── module│         ├── mod1│         │    ├── index.js│         │    └── service.js│         └── mod2│              └── index.js│              └── service.js└── public├── module└── utils复制代码

开发自动化

FEZ 集成了大量自动化前端工作流。任何机械的重复性的工作都应该交给 FEZ 来完成。

  • 自动化搭建本地研发环境,快速响应文件更改并自动刷新浏览器。
  • 自动化同步浏览器中滚动页面、点击等行为到其他浏览器和设备中。
  • 自动化编译ES6/ES7或CommonJS标准的JS代码,并生成source map便于浏览器端调试。
  • 自动化编译Sass/Less/Stylus => CSS文件。
  • 自动化使用Autoprefixer添加CSS3的各种浏览器前缀。
  • 自动化处理第三方框架库JS脚本、CSS样式、Font字体等并自动化插入到页面。
  • 自动化根据配置合并前端JS、CSS文件。
  • 自动化压缩JS、CSS、HTML、图片、字体等静态资源。
  • 自动化Svg转Icon图标、雪碧图合成、移动端高清@2x图片适配,并自动化生成对应样式。
  • 自动化Svg图标合并、自动化使用symbol形式引入页面。
  • 自动化转换所有CSS样式中的PX单位为REM单位。
  • 自动化转换所有图片为WebP格式并生成对应样式文件。
  • 自动化注入WebP浏览器支持检测脚本并替换所有的WebP文件。
  • 自动化生成所有静态资源的MD5版本号。
  • 自动化添加所有静态资源添加CDN地址。
  • 自动化搭建用于测试上线代码的多终端测试环境。
  • 自动化通过SFTP部署上线、或部署静态资源。
  • 自动化通过Mock方式构建随机数据,模拟研发和上线的数据环境。
  • 自动化创建统一结构化项目、及统一结构化的项目页面。
  • 自动化转换TTF为网页字体(eot,svg,ttf,woff,woff2)并生成font-face样式文件。
  • 自动化深度无损压缩PNG/JPG/JPEG图片。

FEZ安装使用

  • Mac系统推荐使用 iterm2 及 oh my zsh
  • 类 Unix 系统,请打开任意终端输入命令执行。
  • Windows 用户请先安装 git,然后在 Git Bash 下执行命令

安装

1. 安装 Node 和 NPM

  • 详细过程参考官网 https://nodejs.org (中文网站 http://nodejs.cn/)
  • Node >= 5.10,建议使用最新稳定版(LTS)。
  • Ubuntu 用户使用 apt-get 安装 node 后,安装的程序名叫 nodejs,需要软链成 node
  • Windows 用户安装完成后需要在 CMD 下确认是否能执行 node 和 npm。

FEZ不能保证所有 window系统 下默认的 Nodejs 环境都能正常运行。可以尝试安装nodejs的windows开发工具集

2. 全局安装 Gulp4.0

任意目录执行

npm install gulp@next -g
复制代码

详情请参考 Github 社区 Gulp

目前Gulp发行版本是3.9.1,如果安装过全局的非4.0版本 gulp 请先卸载 npm uninstall gulp -g

3. 全局安装 Bower (可选安装)

任意目录执行

npm install bower -g
复制代码

使用Bower主要是为了方便管理基于浏览器的第三方框架库,通过页面自动化注入技术解决页面框架库的引入和管理问题,如果您使用node_module资源、或用固定的CDN资源、或手动在页面引入第三方框架库,可以选择不安装。

下载FEZ工程框架

  • 使用Git下载(推荐)
git clone git@github.com:furic-zhao/fez.git
复制代码
  • 使用浏览器下载

https://github.com/furic-zhao/fez/archive/master.zip下载解压到任意目录。

使用FEZ工程框架

1. 安装FEZ的NPM依赖包(在FEZ工程目录执行)

npm install
复制代码

2. 创建项目 (在 FEZ 工程目录执行)

gulp project --dir=demozhj
复制代码

在FEZ工程目录下会自动创建结构化的 demozhj 项目

demozhj
├── fez.config.js            // FEZ功能配置文件
├── package.json             // 项目npm配置文件
├── gulpfile.babel.js        // gulp入口文件
└── src                      // 源码目录├── lib                  // JS公共库文件目录├── static               // 静态资源目录│   ├── fonts            // 字体目录│   ├── images           // 图片目录│   └── styles           // 样式目录│       └── index.scss   // 首页样式文件└── views                // 业务逻辑存放目录├── index            // 首页目录│   ├── index.html   // 首页Html文件│   ├── index.js     // 首页业务逻辑脚本文件│   └── module       // 首页模块目录└── public           // 业务逻辑公共文件目录├── module       // 公共模块目录└── utils        // 公共工具类库目录
复制代码

创建项目会默认创建index页面。

3. 运行项目

进入 demozhj 项目目录 执行

gulp
复制代码

FEZ 会自动打开默认浏览器进入研发环境,项目任意文件的更改都会自动刷新浏览器,请尽情享用FEZ为你带来的愉悦开发体验!

命令说明

  • 研发环境(在项目目录执行)
gulp
复制代码

FEZ 会自动打开系统默认浏览器进入研发环境,您可以打开多个不同终端和不同类型的浏览器访问同一开发页面,开发过程中任何文件的更改,或是在任何一个终端的浏览器中的操作行为,都会同步到每个终端界面,实时查看在每个终端的修改效果。

  • 生产部署(在项目目录执行)
gulp dist
复制代码

FEZ 会自动化编译源码目录中的所有文件(js、sass、less、html、图片、字体等),自动化生成md5版本号,并将编译后的上线代码发布到dist目录。之后通过其它途径、或流程工具发布dist目录到线上服务器。

  • 本地测试上线代码(在项目目录执行)
gulp test
复制代码

FEZ 会自动化构建本地测试环境,并自动打开系统默认浏览器对dist上线目录中的代码真实性的模拟服务器上的操作效果,可以让测试人员打开多个不同终端和不同类型的浏览器一次性测试所有平台、所有浏览器中的最终产品的交互和操作。

  • SSH上传(在项目目录执行)
gulp sftp
复制代码

FEZ 会调用项目目录中fez.config.jssftp配置信息,通过SSH方式快速部署dist 中的上线代码,或是部署dist目录中的静态资源。

  • 打包压缩(在项目目录执行)
gulp zip
复制代码

FEZ 会自动化将dist目录中所有上线代码打包成dist.zip文件,用于通过其它流程工具部署上线。

  • svg => icon 转换(在项目目录执行)
gulp svg2icon
复制代码

FEZ 会调用项目目录中fez.config.jssvgIcons配置信息,自动化转换svg图标为icon字体文件并生成对应的样式文件。

  • 合并雪碧图(在项目目录执行)
gulp sprite
复制代码

FEZ 会调用项目目录中fez.config.jssprites配置信息,自动化合并slice目录中的小图标为雪碧图并生成sprite.png图片到images/sprite/目录,同时生成对应的样式文件(可配置生成css/less/sass/scss)到styles/sprite/目录

  • 创建结构化模版页(在项目目录执行)
gulp page --dir=demopage
复制代码

demopage 页面结构

.
└── src├── static│   └── styles│       └── demopage.scss  // demopage 页面样式文件└── views└── demopage           // demopage 页面目录├── index.html     // demopage HTML页面├── index.js       // demopage 业务逻辑脚本文件└── module         // demopage 模块目录
复制代码
  • 压缩ttf字体(在项目目录执行)
gulp fontmin
复制代码

FEZ 会调用项目目录中fez.config.jsminfonts设置的网页中要显示的文本信息,将src/static/ttf/目录中存放的普通大文件ttf字体生成网页字体(eot,svg,ttf,woff,woff2),并将生成后的小文件网页字体格式存放在src/static/fonts/目录下,同时生成对应的@font-face样式文件(css,less,sass,scss),可在页面样式中直接引用。FEZ让你在网页中大量的使用特殊字体成为可能,请尽情发挥设计师的想象力。

示例:fez-demo-fontmin

  • 图片压缩(在项目目录执行)
gulp imagemin
复制代码

FEZ 会对src/static/images目录中的图片(png,jpg,jpeg,gif)进行压缩。可以配置JPG图片质量压缩比。

  • 图片深度压缩(在项目目录执行)
gulp tinypic
复制代码

FEZ 会调用tinypngAPI对src/static/tinypic目录中的图片(png,jpg,jpeg)深度无损压缩,将压缩后的图片输出到src/static/images,压缩率达到50%以上,压缩前后的图片质量几乎看不出来差别,请尽情享用FEZ为你带来的图片极致性能优化。

FEZ升级

  • 使用Git升级(推荐)

如果你是通过Git下载FEZ工程,在FEZ工程目录里面执行git pull,然后执行npm install

  • 浏览器下载升级

下载FEZ工程目录中的所有文件,覆盖本地的FEZ工程目录中的所有文件,然后执行npm install

每次升级请确保在FEZ工程目录执行npm install

FEZ使用文档

WIKI:github.com/furic-zhao/…

FEZB分支

github.com/furic-zhao/…

FEZB分支是FEZ的Browserify版本,FEZ自4.0起使用webpack作为FEZ底层模块打包工具,此分支不再做大的功能升级。

FEZ生态圈

  • FEZUI

fezui.hestudy.com/

FEZUI 是一套基于 Vue 的支持多终端的用户界面交互组件库,致力于积木式的快速构建项目,自动适配PC端、手机端、Ipad端以及微信端,或内嵌各种第三方Android、IOS的APP中使用,提升产品体验和开发效率、降低开发和维护成本。

  • FEZ Layout

fezlayout.hestudy.com/

FEZ Layout 是基于vue、vuex、vue-router的现代响应式多终端UI布局框架,旨在帮助团队快于构建多终端兼容的中后台产品的界面布局。

  • FEZMOCK

fezmock.hestudy.com/

FEZMOCK 是一套前端数据模拟开发框架,让前端工程师不再依赖服务端环境和接口数据而独立进行开发。增加单元测试的真实性,通过随机数据,模拟各种数据场景。

  • FEZ ApiDoc平台

apidoc.hestudy.com/

API文档、技术文档协作开发平台。帮助团队前后端分离并行工作,提高团队研发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

栈内存和堆内存

堆和栈这两个字我们已经接触多很多次,那么具体是什么存在栈中什么存在堆中呢?就拿JavaScript中的变量来说: 首先JavaScript中的变量分为基本类型和引用类型。 基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在…

L~M方法

L~M方法: L~M(Levenberg-Marquardt)方法有些让人摸不清头脑。玉米觉得L~M让人困扰的主要原因有两点:一是L~M从何而来、二是L~M怎么样用?因为玉米也不是研究最优化理论的,所以玉米在这里用较为通俗的观点&a…

Android——Activity去除标题栏和状态栏

一、在代码中设置 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去除title requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉Activity上面的状态栏getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSC…

Ghosts for Tea

Ghosts for Tea 喝茶?闹鬼? Ten pence for a view over the bay . said the old man with the telescope. Lovely clearmorning. Have a look at the old lighthouse and the remains of the great shipwreckof 1935. “在如此可爱清爽的早晨&#xff0…

HALCON示例程序find_pads.hdev通过fit_rectangle2_contour_xld绘制精准轮廓

HALCON示例程序find_pads.hdev通过fit_rectangle2_contour_xld绘制精准轮廓 示例程序源码(加注释) 关于显示类函数解释 dev_update_pc (‘off’) dev_update_window (‘off’) dev_update_var (‘off’) read_image (Image, ‘die_pads’) dev_close_w…

IDEA将项目上传至码云/GitHub托管

前言 好久都没有写博客了,由于博主之前一直都在上班处于加班的阶段,所以根本就没有时间去学习。现在请假回到学校写论文,有时间来学习了。 所以会不断的进行博客的更新,以及分享我在公司学到的一些新的技术,希望大家多…

BZOJ 1937: [Shoi2004]Mst 最小生成树 [二分图最大权匹配]

传送门 题意: 给一张无向图和一棵生成树,改变一些边的权值使生成树为最小生成树,代价为改变权值和的绝对值,求最小代价 线性规划的形式: $Min\quad \sum\limits_{i1}^{m} \delta_i$ $Sat\quad $非树边边权$\ge$生成树上…

找bug

1.在输入数据按保存键后不知道数据是否已经存入数据库。 修改:增加一个对数据库的监听事件来监听数据库是否发生变化。 2.空数据也能保存成功。 修改:增加一个监听事件来检测是否输入数据。 3.在输入框中输入不否和输入框对数据的要求,但不提…

HALCON示例程序forest.hdev识别森林中的树

HALCON示例程序forest.hdev识别森林中的树 示例程序源码(加注释) 关于显示类函数解释 dev_close_window () dev_update_window (‘off’) read_image (Forest, ‘forest_air1’) get_image_size (Forest, Width, Height) dev_open_window (0, 0, Width…

Hadoop学习之路(十八)MapReduce框架Combiner分区

对combiner的理解 combiner其实属于优化方案,由于带宽限制,应该尽量map和reduce之间的数据传输数量。它在Map端把同一个key的键值对合并在一起并计算,计算规则与reduce一致,所以combiner也可以看作特殊的Reducer。 执行combiner操…

cocos2dx游戏--欢欢英雄传说--添加攻击按钮

接下来添加攻击按钮用于执行攻击动作。同时修复了上一版移动时的bug。修复后的Player::walkTo()函数: void Player::walkTo(Vec2 dest) {if (_seq)this->stopAction(_seq);auto curPos this->getPosition();if (curPos.x > dest.x)this->setFlippedX(t…

Yii2.0 rules常用验证规则

设置一个修改方法,但是save(),没有成功,数据修改失败,查了好久,一般情况就是不符合rules规则,而我没有设置rules规则,重新设置了一个不能为空,然后就修改成功…

HALCON示例程序gray_features.hdev提取灰度图的不同特征(area_center_gray 、elliptic_axis_gray)

HALCON示例程序gray_features.hdev提取灰度图的不同特征(area_center_gray 、elliptic_axis_gray) 示例程序源码(加注释) 读入图片 read_image (Image, ‘monkey’)二值化 threshold (Image, Region, 128, 255)分割连通域 conne…

Machine Vision Pixel Calibration~ ~ ~ ~ ~ ~ ~ ~ ~ ~

Artificial Intelligence and Robotics Research人工智能与机器人研究, 2014, 3, 25-33Published Online May 2014 in Hans. http://www.hanspub.org/journal/airrhttp://dx.doi.org/10.12677/airr.2014.32005

Ceph分布式存储系统-性能测试与优化

测试环境 部署方案:整个Ceph Cluster使用4台ECS,均在同一VPC中,结构如图: 以下是 Ceph 的测试环境,说明如下: Ceph 采用 10.2.10 版本,安装于 CentOS 7.4 版本中;系统为初始安装&…

mysql考试总结

USE school; -- 班级表 CREATE TABLE class(cid TINYINT PRIMARY KEY AUTO_INCREMENT,caption VARCHAR(20) );INSERT INTO class(caption) VALUES("三年二班"),("一年三班"),("三年一班");SELECT * FROM class;-- 老师表 CREATE TABLE teacher(t…

反思

1.说明一下ArrayList和数组的区别,并且分别写出初始化的语句: ArrayList:可以放不同的类型,长度不固定 数组:放同一类型,长度固定 数组的初始化语句:int []anew int []{}; ArrayList初始化语句:…

HALCON示例程序high.hdev使用不同方法提取区域

HALCON示例程序high.hdev使用不同方法提取区域 示例程序源码(加注释) 关于显示类函数解释 dev_close_window () read_image (Mreut, ‘mreut_y’) get_image_size (Mreut, Width, Height) dev_open_window (0, 0, Width, Height, ‘black’, WindowHan…

阅读好书依然是提升自己的高效方法:兼以作者的身份告诉大家如何选择书,以及高效学习的方法...

国内技术网站多如牛毛,质量高的网站也不少,博客园也算一个,各类文章数以百万计,我随便输入一个关键字,比如Spring Cloud,都能看到大量的技术文章和教学视频,我无意贬低技术文章和教学视频的作用…

TCP/IP 协议簇的逐层封装

在使用 TCP 协议的网络程序中,用户数据从产生到从网卡发出去一般要经过如下的逐层封装过程: 从下往上看: 1)链路层通过加固定长度的首部、尾部来封装 IP 数据报(Datagram) 产生以太网帧(Frame)。 其中首部存在对封装数据的…