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.pswp.cn/news/255159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255159.shtml
英文地址,請注明出處:http://en.pswp.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)。 其中首部存在對封裝數據的…