前端React 框架- UmiJS有據說過嗎?

介紹

umi官方宣稱是一個可插拔的企業級 react 應用框架。umi 以路由爲基礎的,支持類 next.js 的約定式路由,以及各類進階的路由功能,並以此進行功能擴展,好比支持路由級的按需加載。而後配以完善的插件體系,覆蓋從源碼到構建產物的每一個生命週期,支持各類功能擴展和業務需求,目前內外部加起來已有 50+ 的插件。css

umi 是螞蟻金服的底層前端框架,已直接或間接地服務了 600+ 應用,包括 支持java、node、H5 無線、離線(Hybrid)應用、純前端 assets 應用、CMS 應用等。他已經很好地服務了咱們的內部用戶,同時但願他也能服務好外部用戶。html

特性

  • ? 開箱即用 ,內置 react、react-router 等前端

  • ? 類 next.js 且功能完備的路由約定 ,同時支持配置的路由方式java

  • ? 完善的插件體系 ,覆蓋從源碼到構建產物的每一個生命週期node

  • ? 高性能 ,經過插件支持 PWA、以路由爲單元的 code splitting 等react

  • ? 支持靜態頁面導出 ,適配各類環境,好比中臺業務、無線業務、egg 、支付寶錢包、雲鳳蝶等webpack

  • ? 開發啓動快 ,支持一鍵開啓 dll 和 hard-source-webpack-plugin 等web

  • ? 一鍵兼容到 IE9 ,基於 umi-plugin-polyfillsnpm

  • ? 完善的 TypeScript 支持 ,包括 d.ts 定義和 umi testwindows

  • ? 與 dva 數據流的深刻融合 ,支持 duck directory、model 的自動加載、code splitting 等等

架構圖

知識圖譜,阿里開源可插拔 React 跨端框架- UmiJS

從源碼到上線的生命週期管理

市面上的框架基本都是從源碼到構建產物,不多會考慮到各類發佈流程,而 umi 則多走了這一步。

下圖是 umi 從源碼到上線的一個流程。

知識圖譜,阿里開源可插拔 React 跨端框架- UmiJS

umi 首先會加載用戶的配置和插件,而後基於配置或者目錄,生成一份路由配置,再基於此路由配置,把 JS/CSS 源碼和 HTML 完整地串聯起來。用戶配置的參數和插件會影響流程裏的每一個環節。

他和 dva、roadhog 是什麼關係?

簡單來講,

  • roadhog 是基於 webpack 的封裝工具,目的是簡化 webpack 的配置

  • umi 能夠簡單地理解爲 roadhog + 路由,思路相似 next.js/nuxt.js,輔以一套插件機制,目的是經過框架的方式簡化 React 開發

  • dva 目前是純粹的數據流,和 umi 以及 roadhog 之間並無相互的依賴關係,能夠分開使用也能夠一塊兒使用,我的以爲 umi + dva 是比較搭的

爲何不是...?

next.js

next.js 的功能相對比較簡單,好比他的路由配置並不支持一些高級的用法,好比佈局、嵌套路由、權限路由等等,而這些在企業級的應用中是很常見的。相比 next.js,umi 在約定式路由的功能層面會更像 nuxt.js 一些。

roadhog

roadhog 是比較純粹的 webpack 封裝工具,做爲一個工具,他能作的就比較有限(限於 webpack 層)。而 umi 則等於 roadhog + 路由 + HTML 生成 + 完善的插件機制,因此能在提高開發者效率方面發揮出更大的價值。

安裝

  1. 入門很是簡單

  2. e

  3. # 新建頁面

  4. $ umi generate page index

  5. # 本地開發

  6. $ umi dev

  7. # 構建上線

  8. $ umi build

環境準備

首先得有 node,並確保 node 版本是 8.10 或以上。(mac 下推薦使用 nvm 來管理 node 版本) 

  1. $ node -v

  2. 8.1x

推薦使用 yarn 管理 npm 依賴,並使用國內源(阿里用戶使用內網源)。

  1. # 國內源

  2. $ npm i yarn tyarn -g

  3. # 後面文檔裏的 yarn 換成 tyarn

  4. $ tyarn -v

  5. # 阿里內網源

  6. $ tnpm i yarn @ali/yarn -g

  7. # 後面文檔裏的 yarn 換成 ayarn

  8. $ ayarn -v

而後全局安裝 umi,並確保版本是 2.0.0 或以上。

  1. $ yarn global add umi

  2. $ umi -v

  3. 2.0.0

腳手架

先找個地方建個空目錄。

  1. $ mkdir myapp && cd myapp

  2. 而後經過 umi g 建立一些頁面,

  3. $ umi g page index

  4. $ umi g page users

  5. umi g 是 umi generate 的別名,可用於快速生成 component、page、layout 等,而且可在插件裏被擴展,好比 umi-plugin-dva 裏擴展了 dva:model,而後就能夠經過 umi g dva:model foo 快速 dva 的 model。

而後經過 tree 查看下目錄,(windows 用戶可跳過此步)

  1. $ tree

  2. .

  3. └── pages

  4. ├── index.css

  5. ├── index.js

  6. ├── users.css

  7. └── users.js

  8. 這裏的 pages 目錄是頁面所在的目錄,umi 里約定默認狀況下 pages 下全部的 js 文件即路由,若是有 next.js 或 nuxt.js 的使用經驗,應該會有點眼熟吧。

而後啓動本地服務器,

  1. $ umi dev

約定式路由

啓動 umi dev 後,你們會發現 pages 下多了個 .umi 的目錄。這是啥?這是 umi 的臨時目錄,能夠在這裏作一些驗證,但請不要直接在這裏修改代碼,umi 重啓或者 pages 下的文件修改都會從新生成這個文件夾下的文件。

而後咱們在 index 和 users 直接加一些路由跳轉邏輯。

先修改 pages/index.js,

  1. import Link from 'umi/link';

  2. import styles from './index.css';

  3. export default function() {

  4. return (

  5. Page index

  6. + <Link to="/users">go to /usersLink>

再修改 pages/users.js,

  1. import router from 'umi/router';

  2. import styles from './index.css';

  3. export default function() {

  4. return (

  5. Page index

 

  • );

  • }

而後瀏覽器驗證,應該已經能夠在 index 和 users 兩個頁面之間經過路由跳轉了。

部署發佈

構建

執行 umi build,

  1. $ umi build

  2. DONE Compiled successfully in 1729ms

  3. File sizes after gzip:

  4. 68.04 KB dist/umi.js

  5. 83 B dist/umi.css

構建產物默認生成到 ./dist 下,而後經過 tree 命令查看,(windows 用戶可忽略此步)

  1. $ tree ./dist

  2. ./dist

  3. ├── index.html

  4. ├── umi.css

  5. └── umi.js

本地驗證

發佈以前,能夠經過 serve 作本地驗證,

  1. $ yarn global add serve

  2. $ serve ./dist

  3. Serving!

  4. - Local: http://localhost:5000

  5. - On Your Network: http://{Your IP}:5000

  6. Copied local address to clipboard!

訪問 http://localhost:5000,正常狀況下應該是和 umi dev 一致的。

部署

本地驗證完,就能夠部署了,這裏經過 now 來作演示。

  1. $ yarn global add now

  2. $ now ./dist

  3. > Deploying /private/tmp/sorrycc-1KVCmK/dist under chencheng

  4. > Synced 3 files (301.93KB) [2s]

  5. > https://dist-jtckzjjatx.now.sh [in clipboard] [1s]

  6. > Deployment complete!

而後打開相應的地址就能訪問到線上的地址了。

測試與配置檢查

測試

umi 內置了基於 jest 的測試工具 umi-test :

  1. $ umi test

  2. Options:

  3. --coverage indicates that test coverage information should be collected and reported in the output

配置檢查

使用 umi inspect 列出配置項的內容用以檢查:

  1. $ umi inspect

  2.  

  3. Options:

  4.  

  5. --mode specify env mode (development or production, default is development)

  6. --rule inspect a specific module rule

  7. --plugin inspect a specific plugin

  8. --rules list all module rule names

  9. --plugins list all plugin names

  10. --verbose show full function definitions in outpu

 

來源商業新知網,原標題:阿里開源可插拔 React 跨端框架- UmiJS

相關文章
相關標籤/搜索