前言
上次入門完了之後感覺意猶未盡,總覺得這個腳手架還是不太完美,還有可以改進的地方,所以為了與人方便也是與己方便,就繼續寫幾篇吧~?,不過既然之前的叫做入門系列,這個就叫做進階吧~
Next.js新手入門系列地址
Next.js腳手架進階系列
使用ant-design出現的一些問題
因為Next.js版本不斷的在更新,特別是升級到7之後,很多外掛都隨之配套升級了,因此如果你們用的是Next.js7以下的版本的話,升級須謹慎。因為官方說7速度快了很多,秉著踩坑我優先的原則,開始了我的升級之路,其中遇到問題最多的就算是與ant-design的契合問題了,主要問題出現在三個方面:
-
各種plugins的升級
// Next.js 6 version "dependencies": { "@zeit/next-less": "^0.3.0", "babel-plugin-import": "^1.8.0", ... }, "devDependencies": { "babel-plugin-transform-decorators-legacy": "^1.3.5", ... } // Next.js 7 version "dependencies": { "@zeit/next-less": "^1.0.1", "babel-plugin-import": "^1.9.0", ... }, "devDependencies": { "@babel/plugin-proposal-decorators": "^7.1.0", ... } 複製程式碼
首先就是next-less這個核心檔案需要升級,然後就是babel與antd的外掛進行了切換。具體可以在程式碼裡看。
-
目錄結構變化導致靜態CSS檔案引入路徑問題
首先,以前一直用的是Next.js 6, 所有的css檔案會被打包成style.css存放路徑是
/.next/static/style.css
。而Next.js 7以後,應該是webpack優化了CSS編譯,編譯過後資料夾結構如下:
![Next.js腳手架進階 — 完美契合ant-design](https://i.iter01.com/images/d2310d6a7e191e0231c1e975b4b5144293907f1c05d5bbc756192fe893745ab0.png)
![Next.js腳手架進階 — 完美契合ant-design](https://i.iter01.com/images/497ad8c00b780a8df40dbd681e0a72d96ea56be32d21b441c7c4e2e29fb75024.jpg)
解決辦法:移除_app.js的Head頭部的link標籤,改成在_app.js頂部import樣式檔案進來
import '../asserts/styles.less';
![Next.js腳手架進階 — 完美契合ant-design](https://i.iter01.com/images/e4e12a9c0bd28b7fd73b05eb5d0c8599b0ed53d0c409bc25d393d42c3d789c19.png)
-
打包後ant-design的custom檔案被覆蓋的問題
最後,最頭疼的問題,上面都改完了之後,你在開發環境跑起來會發現,OK,升級成功,不過你試試打包一下,打包過後你的custom-css樣式就會被ant-design原本樣式所覆蓋,也就是你的custom-css檔案不生效了。
【解決辦法】:
- 如果你接受不改ant-design的樣式,就用它本身框架帶的屬性就行,那完全OK,什麼都不用做了。
- 自己clone下來ant-design的包進行更改。以前的文章正好有人給我留言這塊。
![Next.js腳手架進階 — 完美契合ant-design](https://i.iter01.com/images/cc2ca39ff6f3f5eb3ceaa6d3ee3e4759f28ce0d7660344ecfb8bba275daa6dc6.png)
- 以前的我懵懂無知,可能第二種是最好的解決辦法,但是直到我發現了下面最完美的解決辦法。
// next.config.js
...
// Where your antd-custom.less file lives
const themeVariables = lessToJS(
fs.readFileSync(
path.resolve(__dirname, './asserts/antd-custom.less'),
'utf8',
),
);
...
withLess({
lessLoaderOptions: {
javascriptEnabled: true,
modifyVars: themeVariables, // 新增modifyVars屬性
localIdentName: '[local]___[hash:base64:5]',
},
...
})
複製程式碼
上面第三種也是我現在在用的,目前沒發現什麼問題,大家可以放心使用~
另外官方Demo我也幫助簡單的更新了一下,現在create-next-app的 with-ant-design-less的Demo用的就是我pr的這一版。
![Next.js腳手架進階 — 完美契合ant-design](https://i.iter01.com/images/efbfe61eb7303fbc1006b4bc99333fa80b0e0f1e2576fc504e474beb9de02863.png)
總結
又水了一篇,這個系列我就想從踩坑入門的那個腳手架一步一步的進行完善,讓大家使用起來越來越方便,增加可擴充套件性吧。所以每一篇文章都只針對一個活著兩個點,不長篇大論了就。
有意見可以留言, 喜歡的給個Star,萬分感謝~
QQ群:641113448 (備註:Next.js)