ng-zorro-antd 受限于 #10430 一直都未發(fā)布 Angular6 版本,雖然早已經(jīng)準(zhǔn)備好 #1404。
這里的原因是多重的,antd 的 less 版本需要 JavaScript 的支持,想當(dāng)初我有想把它轉(zhuǎn)成 Scss 版本,看到這些我內(nèi)心是奔潰的航背。
而 Less 3.x 認(rèn)為支持 JavaScript 是詭異的,因此提供了一個(gè)叫 @plugin
看起來(lái)更沒(méi)那么詭異來(lái)解決 less 調(diào)用 JavaScript滚停。
這就像三角戀一樣沃粗,antd 那邊沒(méi)空重構(gòu),Angular Cli 默認(rèn)又是依賴 less 3.x键畴,雖然這個(gè)三角戀只差一行代碼而已 #866最盅。
zorro 支持 Angular6 嗎?
zorro 從第一版本開(kāi)始就以 APF 格式打包起惕,Angular6 最大的改進(jìn)是來(lái)自底層涡贱,而非應(yīng)用層面,因此就應(yīng)用層面而言不需要更改任何代碼惹想。
唯一你需要改動(dòng)的便是 rxjs6
的破壞性變更 MIGRATION问词。
怎么做?
綜合上述嘀粱,讓 zorro 支持 Angular6 有兩種方式激挪,畢竟在三角戀還未理清之前,我們什么事也做不了锋叨。
就應(yīng)用層面而言垄分,其核心在于 antd less 的編譯以及 rxjs6 的變更。對(duì)于后者因?yàn)?zorro 內(nèi)部大量使用 rxjs5 的類庫(kù)娃磺,在 zorro 未提供 Angular6 版本之前安裝 rxjs-compat
是我們唯一的選擇薄湿。
npm i --save rxjs-compat
而對(duì)于前者有兩種方案可以解決,這也是本文的核心。
降級(jí) Less
Less 2.7.3 版本是 Angular5 所依賴豺瘤,并且默認(rèn)是支持 JavaScript吆倦,因此只需要降級(jí) Less 版本就可以正常的使用。
npm i --save less@~2.7.0
對(duì)于
yarn
可能會(huì)失敗坐求,因?yàn)?Angular Cli 依賴 less 3蚕泽,然而雖然依然可以使用yarn add less@~2.7.0 -E
但好像并不生效,我對(duì) yarn 并不熟悉桥嗤,希望有人指點(diǎn)這其中的原因赛糟。
失去定制主題
前面一直說(shuō)終究根源在于 Less 3 對(duì) JavaScript 的支持導(dǎo)致的,好在 ng-zorro-antd 在 0.7.1
時(shí)新增了 CSS 版本的樣式砸逊,它是一個(gè)已經(jīng)編譯過(guò)了 antd 所有樣式文件。
當(dāng)定制主題不是剛需時(shí)掌逛,可以直接在 angular.json
中引入 antd 的 css 文件师逸,來(lái)解決 zorro 樣式加載的問(wèn)題。
"styles": [
"node_modules/ng-zorro-antd/src/ng-zorro-antd.css",
"src/styles.less"
]
風(fēng)險(xiǎn)
zorro 0.7.x
已經(jīng)承諾至 1.0
不會(huì)再有破壞性變更豆混,其中 1.0
也標(biāo)志者 Angular6 的完全支持篓像。
因此,屆時(shí)你完全可以恢復(fù)定制主題功能以及移除 rxjs-compat
亦可皿伺。
當(dāng)然员辩,若你的項(xiàng)目有第三方組件還未提供 Angular6 版本的話,那么這個(gè)升級(jí)就要先做好調(diào)研了鸵鸥,免得蛋疼奠滑。