React 開(kāi)發(fā)之Umi烏米框架使用

以往搭建React應(yīng)用時(shí)往往使用官方推薦的 # create-react-app 不過(guò)使用官方的腳手架往往不能很好的適應(yīng)我們現(xiàn)有的項(xiàng)目,比如我們要集合webpack打包?我們要引入Redux狀態(tài)管理器?Umi (烏米)框架應(yīng)運(yùn)而生涯肩。

讓我們來(lái)看看官方的自我介紹:

umi 以路由為基礎(chǔ)的顷牌,支持類 next.js 的約定式路由,以及各種進(jìn)階的路由功能敢朱,并以此進(jìn)行功能擴(kuò)展,比如支持路由級(jí)的按需加載摩瞎。然后配以完善的插件體系拴签,覆蓋從源碼到構(gòu)建產(chǎn)物的每個(gè)生命周期,支持各種功能擴(kuò)展和業(yè)務(wù)需求旗们,目前內(nèi)外部加起來(lái)已有 50+ 的插件蚓哩。

再讓我們看看Umi的特色:

  • ?? 開(kāi)箱即用,內(nèi)置 react上渴、react-router 等
  • ?? 類 next.js 且功能完備的路由約定岸梨,同時(shí)支持配置的路由方式
  • ?? 完善的插件體系喜颁,覆蓋從源碼到構(gòu)建產(chǎn)物的每個(gè)生命周期
  • ?? 高性能,通過(guò)插件支持 PWA曹阔、以路由為單元的 code splitting 等
  • ?? 支持靜態(tài)頁(yè)面導(dǎo)出半开,適配各種環(huán)境,比如中臺(tái)業(yè)務(wù)赃份、無(wú)線業(yè)務(wù)稿茉、egg、支付寶錢包芥炭、云鳳蝶等
  • ?? 開(kāi)發(fā)啟動(dòng)快漓库,支持一鍵開(kāi)啟 dll
  • ?? 一鍵兼容到 IE9,基于 umi-plugin-polyfills
  • ?? 完善的 TypeScript 支持园蝠,包括 d.ts 定義和 umi test
  • ?? dva 數(shù)據(jù)流的深入融合渺蒿,支持 duck directory、model 的自動(dòng)加載彪薛、code splitting 等等

搭建流程

現(xiàn)在我們自己手動(dòng)搭建一套完整可用的Umi框架吧

第一步:環(huán)境檢測(cè)及安裝

首先需要node, 并確保 node 版本是 8.10 或以上茂装。(mac 下推薦使用 nvm 來(lái)管理 node 版本)
而包管理器,這里推薦使用使用 yarn 管理 npm 依賴
1.安裝yarn
可根據(jù)官網(wǎng)介紹選擇安裝方式 https://yarnpkg.com/zh-Hans/docs/install#windows-stable
2.全局安裝 umi善延,并確保版本是 2.0.0 或以上少态。

$ yarn global add umi

第二步:通過(guò)腳手架創(chuàng)建項(xiàng)目

umi 通過(guò) create-umi 提供腳手架能力

  1. 在需要生成項(xiàng)目的文件夾下,打開(kāi)CMD or 終端 命令行輸入 yarn create umi
$ yarn create umi
  1. 選擇需要生成的項(xiàng)目類型
? Select the boilerplate type (Use arrow keys)
  ant-design-pro  - Create project with an layout-only ant-design-pro boilerplate, use together with umi block.
? app             - Create project with a simple boilerplate, support typescript.
  block           - Create a umi block.
  library         - Create a library with umi.
  plugin          - Create a umi plugin.
  • app易遣,通用項(xiàng)目腳手架彼妻,支持選擇是否啟用 TypeScript,以及 umi-plugin-react 包含的功能
  • ant-design-pro豆茫,僅包含 ant-design-pro 布局的腳手架侨歉,具體頁(yè)面可通過(guò) umi block 添加
  • block,區(qū)塊腳手架
  • plugin揩魂,插件腳手架
  • library幽邓,依賴(組件)庫(kù)腳手架,基于 umi-plugin-library
    在此我們 上下箭頭切換到 app 并回車確定選擇火脉。
  1. 其他選項(xiàng)
    此時(shí)會(huì)出現(xiàn)提示是否需要支持Typescript, 可根據(jù)實(shí)際項(xiàng)目開(kāi)發(fā)情況選擇是否使用牵舵。
? Do you want to use typescript? (y/N)

選擇Typescript支持后再選擇你需要的功能(多選),功能介紹詳見(jiàn) plugin/umi-plugin-react倦挂。

? What functionality do you want to enable? (Press <space> to select, <a> to toggle all, <i> to invert selection)
?? antd
 ? dva
 ? code splitting
 ? dll

同樣按上下箭頭移動(dòng)畸颅,并按 空格 鍵選中需要的功能。
antd: UI框架妒峦,啟用后實(shí)現(xiàn)antd, antd-mobile 和 antd-pro 的按需編譯重斑,無(wú)需要手動(dòng)配置。
dva: 基于 reduxredux-saga 的數(shù)據(jù)流方案肯骇,然后為了簡(jiǎn)化開(kāi)發(fā)體驗(yàn)窥浪,dva 還額外內(nèi)置了 react-routerfetch,所以也可以理解為一個(gè)輕量級(jí)的應(yīng)用框架
code splitting: 是否代碼分包
dll: 通過(guò) webpack 的 dll 插件預(yù)打包一份 dll 文件來(lái)達(dá)到二次啟動(dòng)提速的目的
注意 此處多選項(xiàng)未選擇笛丙,后期也可以在配置文件中配置漾脂。

確定后,會(huì)根據(jù)你的選擇自動(dòng)創(chuàng)建好目錄和文件胚鸯。

第三步:運(yùn)行及編譯

安裝依賴

$ yarn

啟動(dòng)項(xiàng)目

$ yarn start

這樣我們就可以愉快的開(kāi)發(fā)和調(diào)試了骨稿。

當(dāng)我們開(kāi)發(fā)好要編譯項(xiàng)目發(fā)布測(cè)試or生產(chǎn)時(shí),執(zhí)行:

$ yarn build

目錄結(jié)構(gòu)說(shuō)明

.
├── dist/ // 默認(rèn)的 build 輸出目錄
├── mock/ // mock 文件所在目錄姜钳,基于 express
├── config/
├── config.js // umi 配置坦冠,同 .umirc.js,二選一哥桥, 建議配置.umirc.js
└── src/ // 源碼目錄辙浑,可選
├── layouts/index.js // 全局布局
├── pages/ // 頁(yè)面目錄,里面的文件即路由
├── .umi/ // dev 臨時(shí)目錄拟糕,需添加到 .gitignore
├── .umi-production/ // build 臨時(shí)目錄判呕,會(huì)自動(dòng)刪除
├── document.ejs // HTML 模板
├── 404.js // 404 頁(yè)面
├── page1.js // 頁(yè)面 1,任意命名送滞,導(dǎo)出 react 組件
├── page1.test.js // 用例文件侠草,umi test 會(huì)匹配所有 .test.js 和 .e2e.js 結(jié)尾的文件
└── page2.js // 頁(yè)面 2,任意命名
├── global.css // 約定的全局樣式文件犁嗅,自動(dòng)引入边涕,也可以用 global.less
├── global.js // 可以在這里加入 polyfill
├── app.js // 運(yùn)行時(shí)配置文件
├── .umirc.js // umi 配置,同 config/config.js褂微,二選一
├── .umirc.js // umi 配置奥吩,同 config/config.js,二選一
├── .env // 環(huán)境變量
└── package.json

開(kāi)發(fā)提示

.umirc.js 配置蕊梧,
該文件中可以配置項(xiàng)目基本情況霞赫,如上面安裝步驟中出現(xiàn)是否選用antd, dva等,在此文件中都可以更改為true, 另外還可以配置 webpack 打包配置肥矢,具體的配置項(xiàng)詳見(jiàn).umirc.js 配置端衰。

設(shè)置.umirc.local.js 文件
由于.umirc里的配置眾多而且為了優(yōu)化項(xiàng)目必然會(huì)分包代碼抽離等,而在本地運(yùn)行時(shí)無(wú)需這些甘改,便可配置.umirc.local.js 文件旅东,注意此文件中的選項(xiàng)配置和.umirc.js 配置一樣,不要提交到 git十艾,所以通常需要配置到 .gitignore抵代。本地運(yùn)行時(shí)會(huì)和 .umirc.js 合并后再返回。

由于umi 會(huì)根據(jù) pages 目錄自動(dòng)生成路由配置忘嫉,所以無(wú)需要手動(dòng)配置路由荤牍,會(huì)根據(jù) src / pages 下 文件名自動(dòng)生成路由案腺,但是你也可以配置.umirc.js中的 routes 屬性,此配置項(xiàng)存在時(shí)則不會(huì)對(duì) src/pages 目錄做約定式的解析康吵。

常用路由操作

import React, { PureComponent } from 'react';
import Link from 'umi/link';
import router from 'umi/router';

class Examples extends PureComponent {
    render () {
        return (
            <>
                {/* 普通使用 */}
                <Link to="/list">跳轉(zhuǎn)</Link>

                {/* 帶參數(shù) */}
                <Link to="/list?a=b">跳轉(zhuǎn)</Link>

                {/* 包含子組件 */}
                <Link to="/list?a=b"><button>跳轉(zhuǎn)</button></Link>

                {/* 點(diǎn)擊跳轉(zhuǎn) */}
                <button onClick={() => router.push('/list')}>跳轉(zhuǎn)</button>
            </>
        )
    }
}
export default Examples;

更多查看路由配置

最后

umi框架為我們開(kāi)發(fā)項(xiàng)目提升了效率劈榨,而其本身也在不斷的升級(jí)完善中,在2.8.0+版本晦嵌,umi 可配置ssr 服務(wù)器端渲染同辣,相信umi還將越來(lái)越完善。
更多查看官方文檔https://umijs.org/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惭载,一起剝皮案震驚了整個(gè)濱河市旱函,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌描滔,老刑警劉巖棒妨,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伴挚,居然都是意外死亡靶衍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門茎芋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)颅眶,“玉大人,你說(shuō)我怎么就攤上這事田弥√涡铮” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵偷厦,是天一觀的道長(zhǎng)商叹。 經(jīng)常有香客問(wèn)我,道長(zhǎng)只泼,這世上最難降的妖魔是什么剖笙? 我笑而不...
    開(kāi)封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮请唱,結(jié)果婚禮上弥咪,老公的妹妹穿的比我還像新娘。我一直安慰自己十绑,他們只是感情好聚至,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著本橙,像睡著了一般扳躬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天贷币,我揣著相機(jī)與錄音击胜,去河邊找鬼。 笑死片择,一個(gè)胖子當(dāng)著我的面吹牛潜的,可吹牛的內(nèi)容都是我干的骚揍。 我是一名探鬼主播字管,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼信不!你這毒婦竟也來(lái)了嘲叔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抽活,失蹤者是張志新(化名)和其女友劉穎硫戈,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體下硕,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丁逝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梭姓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霜幼。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖誉尖,靈堂內(nèi)的尸體忽然破棺而出罪既,到底是詐尸還是另有隱情,我是刑警寧澤铡恕,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布琢感,位于F島的核電站,受9級(jí)特大地震影響探熔,放射性物質(zhì)發(fā)生泄漏驹针。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一诀艰、第九天 我趴在偏房一處隱蔽的房頂上張望柬甥。 院中可真熱鬧,春花似錦涡驮、人聲如沸暗甥。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撤防。三九已至,卻和暖如春棒口,著一層夾襖步出監(jiān)牢的瞬間寄月,已是汗流浹背辜膝。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漾肮,地道東北人厂抖。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像克懊,于是被迫代替她去往敵國(guó)和親忱辅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • dva.js 簡(jiǎn)介 dva 是阿里前端架構(gòu)師 sorrycc 帶 team 研發(fā)的一套輕量級(jí)前端框架谭溉,其目的是盡量...
    那顆星_fcaf閱讀 3,673評(píng)論 0 24
  • 什么是Umi.js? umi墙懂,中文可發(fā)音為烏米,是一個(gè)可插拔的企業(yè)級(jí) react 應(yīng)用框架扮念。你可以將它簡(jiǎn)單的理解為...
    月滿軒尼詩(shī)_閱讀 100,804評(píng)論 1 34
  • dva框架的使用詳解及Demo教程 在前段時(shí)間损搬,我們也學(xué)習(xí)講解過(guò)Redux框架的基本使用,但是有很多同學(xué)在交流群里...
    光強(qiáng)_上海閱讀 61,166評(píng)論 5 55
  • 經(jīng)常夢(mèng)到一個(gè)地方 一個(gè)曼妙的身影 陌生又熟悉 是否日有所思 青山綠水 不變的記憶 是與你攜手南山 是那夜漫無(wú)邊際的...
    星塵夢(mèng)羽閱讀 155評(píng)論 3 6
  • 老子說(shuō)“柔軟勝剛強(qiáng)”。天下沒(méi)有比水更柔軟的弄匕,也沒(méi)有什麼比水更善於打敗堅(jiān)硬的東西颅悉,水平靜的時(shí)候,若物無(wú)聲粘茄;水...
    雨巷江南閱讀 266評(píng)論 0 0