Ant Design 官網對「如何 react-app-rewired 的方式進行按需加載」進行了說明,詳見 在 create-react-app 中使用 一文,文中有這樣一段話javascript
你也能夠使用 create-react-app 提供的 yarn run eject 命令將全部內建的配置暴露出來。不過這種配置方式須要你自行探索,不在本文討論範圍內。css
本文主要就 Eject 方式進行探索前端
參考:如何擴展 Create React App 的 Webpack 配置 的 Eject 方式java
首先使用 create-react-app 建立一個項目react
$ create-react-app antd-test
複製代碼
建立完項目後,進入項目目錄,執行 yarn run eject 或 npm run ejectwebpack
$ npm run eject
複製代碼
執行後會出現提示,該操做不可逆,選擇 y 繼續 git
成功 eject 後會暴露 webpack 的配置,package.json 增長了不少的依賴github
使用 cnpm 安裝 antdweb
$ cnpm install antd
複製代碼
修改 src/App.js
,引入 antd 的按鈕組件。shell
import React, { Component } from 'react';
import Button from 'antd/lib/button';
import './App.css';
class App extends Component {
render() {
return (
<div className="App"> <Button type="primary">Button</Button> </div>
);
}
}
export default App;
複製代碼
執行 cnpm install 安裝依賴,並啓動項目
$ cnpm install
$ npm start
複製代碼
啓動以後發現 button 並無樣式,須要引入 antd 的 css 文件
修改 src/App.css
,在文件頂部引入 antd/dist/antd.css
。
@import '~antd/dist/antd.css';
.App {
text-align: center;
}
...
複製代碼
在文件頂部引入 antd/dist/antd.css
實際上加載了所有的 antd 組件的樣式(對前端性能是個隱患)。 babel-plugin-import 是一個用於按需加載組件代碼和樣式的 babel 插件(原理)
$ cnpm install babel-plugin-import --save-dev
複製代碼
修改 src/App.js
...
- import Button from 'antd/lib/button';
+ import { Button } from 'antd';
...
複製代碼
而後移除前面在 src/App.css
裏全量添加的 @import '~antd/dist/antd.css';
此時發現按鈕樣式不生效了,最簡單的方式是修改 package.json
文件裏的 babel 配置, 增長 babel-plugin-import 的配置
...
"babel": {
"presets": [
"react-app"
- ]
+ ],
+ "plugins": [
+ ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]
+ ]
}
...
複製代碼
從新執行 npm start
,樣式從新生效
至此使用 Eject 方式按需引入 antd 的方式已經探索完畢。