ant design pro升級v4指南(附umi3與antd4升級)

前言

自己在去年用ant design pro 創(chuàng)建了個后臺服務(wù)的項目祷安,當(dāng)時創(chuàng)建的時候umi控制臺提示是否使用antd 4,當(dāng)時抱著嘗鮮的想法選擇了yes,結(jié)果項目跑起來之后,功能沒有問題,但是打開后臺后發(fā)現(xiàn)各種提醒你升級或者遷移的warning,類似這樣:

image

看著著實蛋疼,ant design pro 本質(zhì)上是螞蟻全家桶,結(jié)合了antd和umi的一整套后臺項目解決方案,如果要解決這些warning,需要對整個項目進行系統(tǒng)升級(umi 2內(nèi)部使用的還是antd 3版本的組件,哪怕你業(yè)務(wù)組件都改了手报,umi不升級警告還是存在的)。

升級實戰(zhàn)

antd design pro 升級

這個升級最簡單改化,根據(jù)官方文檔的提醒掩蛤,直接安裝最新依賴:

npm i @ant-design/pro-layout --save

然后需要替換BasicLayout文件,這個直接參考官網(wǎng)升級指南即可陈肛,這里不贅述揍鸟。

umi 3 升級

接下來的重點是umi 從2升級到3,官網(wǎng)講了大致的改動句旱,但是具體的升級細節(jié)涉及的不多阳藻,這里我將結(jié)合官網(wǎng)指南和個人的項目來進行講解:
首先umi3需要node 10.13以上,這個是前提,其次為了支持umi3的新別名@@需要修改tsconfig.json的配置,在path中增加如下內(nèi)容:

"paths": {
    "@/*": ["./src/*"],
    "@@/*": ["./src/.umi/*"]
}

接下來要修改項目的配置文件config/config.ts, 原先的配置文件:

const plugins: IPlugin[] = [
  [
    'umi-plugin-react',
    {
      antd: true,
      dva: {
        hmr: true,
      },
      locale: {
        // default false
        enable: true,
        // default zh-CN
        default: 'zh-CN',
        // default true, when it is true, will use `navigator.language` overwrite default
        baseNavigator: true,
      },
      dynamicImport: {
        loadingComponent: './components/PageLoading/index',
        webpackChunkName: true,
        level: 3,
      },
      pwa: pwa
        ? {
            workboxPluginMode: 'InjectManifest',
            workboxOptions: {
              importWorkboxFrom: 'local',
            },
          }
        : false, // default close dll, because issue https://github.com/ant-design/ant-design-pro/issues/4665
      // dll features https://webpack.js.org/plugins/dll-plugin/
      // dll: {
      //   include: ['dva', 'dva/router', 'dva/saga', 'dva/fetch'],
      //   exclude: ['@babel/runtime', 'netlify-lambda'],
      // },
    },
  ],
  [
    'umi-plugin-pro-block',
    {
      moveMock: false,
      moveService: false,
      modifyRequest: true,
      autoAddMenu: true,
    },
  ],
];

export default {
  plugins,
  targets: {
    ie: 11,
  },
  //    省略部分內(nèi)容...
}

umi2中的plugins被移除(即無需使用umi-plugin-react)谈撒,其中的配置項上提一層腥泥,修改后:

import { defineConfig, utils } from 'umi';

export default defineConfig({
  hash: true,
  antd: {},
  dva: {
    hmr: true,
  },
  locale: {
    default: 'zh-CN',
    antd: true,
    // default true, when it is true, will use `navigator.language` overwrite default
    baseNavigator: true,
  },
  dynamicImport: {
    loading: '@/components/PageLoading/index',
  },
  targets: {
    ie: 11,
  },
  //    省略部分內(nèi)容...
}

umi3中將原先plugins中的pwa配置去除,umi-plugin-pro-block啃匿、umi-plugin-ga蛔外、umi-plugin-antd-theme等插件都去除蛆楞,同時最外層的配置需要使用umi3中最新的defineConfig進行處理,老版本中使用slash2這個包來處理windows下的css路徑夹厌,新版本通過umi.utils.winPath來處理豹爹。這里還有幾個關(guān)鍵點要注意:

  • 配置中的lessLoaderOptions要替換成lessLoader
  • 配置中的cssLoaderOptions要替換為cssLoader
  • 刪除了 routes、library尊流、dll帅戒、hardSource、pwa崖技、hd、fastClick钟哥、chunks迎献,不可繼續(xù)使用
  • 內(nèi)置 dynamicImport、title腻贰、scripts吁恍、headScripts、metas 和 links 到 Umi 中播演,可繼續(xù)使用
    關(guān)于配置文件的升級冀瓦,還可以參考官方的ant design pro 4的默認配置文件

package.json移除不需要的依賴:

{
  "umi-plugin-antd-icon-config": "^1.0.2",
  "umi-plugin-ga": "^1.1.3",
  "umi-plugin-pro": "^1.0.3",
  "umi-types": "^0.5.9",
  "redux": "^4.0.1",
  "umi-plugin-antd-icon-config": "^1.0.2",
  "umi-plugin-antd-theme": "1.2.0",
  "umi-plugin-pro-block": "^1.3.2",
  "umi-plugin-react": "^1.14.10",
  "dva": "^2.6.0-beta.16"
}

添加新的依賴:

{
  "@umijs/plugin-blocks": "^2.0.5",
  "@umijs/preset-ant-design-pro": "^1.0.1",
  "@umijs/preset-react": "^1.3.0",
  "@umijs/preset-ui": "^2.0.9"
}

dvaredux等庫已經(jīng)全部整合到了umi包中写烤,原先那些包中引用的方法直接從umi中導(dǎo)入即可翼闽,不再需要引用上述提到的那些包。具體涉及的方法包括connect洲炊,ConnectProps, getLocale, setLocale感局,formatMessageDispatch暂衡,Link询微,FormattedMessageReducer狂巢,Effect撑毛,AnyAction等等。

業(yè)務(wù)代碼調(diào)整

樣式調(diào)整

除了上述提到的點唧领,業(yè)務(wù)代碼上還有部分改動藻雌,首先如果要在css里引用別名或第三方庫,需要添加~前綴疹吃,例如:

# 別名
變 background: url(@/xx/xx.jpg)
為 background: url(~@/xx/xx.jpg)

# 第三方庫
變 @import url(foo/bar.css);
為 @import url(~foo/bar.css);

部分方法調(diào)整

原先的umi中的router相關(guān)方法全部替換為history:

import router from 'umi/router';
...
 router.push(`/account/${key}`);
...

變?yōu)椋?/p>

import { connect, history } from 'umi';
...
history.push(`/account/${key}`);

如果你運行項目蹦疑,可能會有如下提醒:

image

這個是由于umi3中針對國際化的相關(guān)語法有了變化,根據(jù)提醒萨驶,如果還使用老的formatMessage歉摧,在切換語言時可能頁面UI不會跟著變化,需要使用新的useIntlinjectIntl,這兩者都是umi3中的新方法叁温,前者針對react 的hooks語法再悼,后者針對class。以useIntl為例膝但,原來的寫法為:

import { formatMessage } from 'umi3';
...
return(<ProLayout
    formatMessage={formatMessage}
>
...
</ProLayout>)
...

現(xiàn)在為:

import { useIntl } from 'umi3';
const intl = useIntl();
...
return(<ProLayout
    formatMessage={intl.formatMessage}
>
...
</ProLayout>)
...

injectIntl的使用方法類似冲九,可以去查找對應(yīng)的api。

antd 4 升級

接下來的主要遷移工作在于antd 4跟束,該版本中的很多組件重寫或者使用了新的api,其中比較典型的就是最為常用的Form組件莺奸,icon組件也改變了引用的方式,能夠顯著減小打包體積冀宴。這里由于篇幅關(guān)系灭贷,不詳細展開。表單遷移的注意事項詳見官方文檔.antd 4的其他變化詳見遷移指南

參考文獻

ant design pro 4官方遷移文檔
ant design pro 中升級umi 3
umi 3 官方升級文檔
antd 4官方升級指南

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末略贮,一起剝皮案震驚了整個濱河市甚疟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逃延,老刑警劉巖览妖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異揽祥,居然都是意外死亡讽膏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門盔然,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桅打,“玉大人,你說我怎么就攤上這事愈案⊥ξ玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵站绪,是天一觀的道長遭铺。 經(jīng)常有香客問我,道長恢准,這世上最難降的妖魔是什么魂挂? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮馁筐,結(jié)果婚禮上涂召,老公的妹妹穿的比我還像新娘。我一直安慰自己敏沉,他們只是感情好果正,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布炎码。 她就那樣靜靜地躺著,像睡著了一般秋泳。 火紅的嫁衣襯著肌膚如雪潦闲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天迫皱,我揣著相機與錄音歉闰,去河邊找鬼。 笑死卓起,一個胖子當(dāng)著我的面吹牛和敬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戏阅,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼概龄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饲握?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蚕键,失蹤者是張志新(化名)和其女友劉穎救欧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锣光,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡笆怠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了誊爹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹬刷。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖频丘,靈堂內(nèi)的尸體忽然破棺而出办成,到底是詐尸還是另有隱情,我是刑警寧澤搂漠,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布迂卢,位于F島的核電站,受9級特大地震影響桐汤,放射性物質(zhì)發(fā)生泄漏而克。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一怔毛、第九天 我趴在偏房一處隱蔽的房頂上張望员萍。 院中可真熱鬧,春花似錦拣度、人聲如沸碎绎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽混卵。三九已至映穗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幕随,已是汗流浹背蚁滋。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赘淮,地道東北人辕录。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像梢卸,于是被迫代替她去往敵國和親走诞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

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