背景
在蚂蚁金服推出ant-design-pro
的开源项目后,仔细了解了下,根据官网的介绍:
开箱即用的中台前端/设计解决方案
不过,该项目是基于dva
的roadhog
构建,我更倾向于使用react-script
作为脚手架,所以也萌生了将现有的ant-design-pro
项目的基础构建工具迁移到react-script
的想法。
过程描述
1. 使用create-react-app
创建一个新的工程
1 | create-react-app my-project |
2. 安装react-app-wired
和less-modules
1 | yarn add react-app-rewired react-app-rewire-less-modules@https://github.com/WhatAKitty/react-app-rewire-less-modules less-loader --dev |
这两个模块的作用主要在于:扩展react-script
本身的webpack
配置。至于为什么要这么做,是因为为了简化开发流程,react-script
本身已经将所有配置都隐藏配置;如果想要自行配置一些插件或者设置babel
属性,只能通过react-app-wired
来扩展。
3. 修改启动测试脚本
打开根路径下的package.json
文件:
将以下内容:
1 | "scripts": { |
修改为:
1 | "scripts": { |
4. 创建react-app-wired
的配置覆盖文件
新建文件config-overrides.js
,将以下内容写入文件:
1 | const path = require('path'); |
5. 安装ant-design-pro
需要的依赖
以下是ant-design-pro
需要的依赖:
1 | "antd": "3.0.0-beta.5", |
通过以下命令安装:
1 | yarn add xxxx |
注意,有些事prerelease版本,需要指定特定版本安装,比如:antd
和dva
。
使用beta版本的原因如下:atnd
:ant-design-pro
以3.x为基础构建dva
: dva
的2.1.0-beta
版本修复了一个import
的issue,如果使用2.0.4
版本,我们的项目将无法启动。
6. 迁移ant-design-pro
代码
到了比较重要的一个步骤了,这个步骤我们需要将ant-design-pro
的代码迁移至我们的项目。
在这里,我们分为几个小步骤进行:
- 删除我们自己项目的
src
文件夹下所有内容 - 将
src
文件夹下内容迁移至我们项目的src
文件夹下 修改
/public/index.html
文件,将g2
图标组件静态导入:1
<script src="https://gw.alipayobjects.com/as/g/??datavis/g2/2.3.12/index.js,datavis/g-cloud/1.0.2/index.js,datavis/g2-plugin-slider/1.2.1/slider.js"></script>
安装
react-fetch-mock
替代rodhog
的mock
:1
yarn add react-fetch-mock --dev
创建/src/__mocks__
文件夹,并且将ant-design-pro
根路径下mock
文件夹内容全部迁移至/src/__mocks__
文件夹下。
在/src/__mocks__
文件夹下新建index.js
文件:
复制.rodhog.mock.js
内容,并修改为:
1 | import { Mock } from 'react-fetch-mock'; |
同时,__mocks__
文件夹下其他非index.js
文件,需要根据react-fetch-mock
规则进行修改。具体用法,可以参考:https://github.com/WhatAKitty/react-fetch-mock。改造后的文件内容,可以在此查看:https://github.com/WhatAKitty/react-script-antd-pro/tree/master/src/__mocks__
7. 完成
改造基本完成,可以通过下面命令来查看具体效果:
1 | yarn start |
结束语
通过以上,我们已经完成改造。
如果嫌自己改造麻烦,这里是已经完成的版本:https://github.com/WhatAKitty/react-script-antd-pro,并且会根据`ant-design-pro`进行每天更新。
扩展
有空的话,会将动态路由的改造过程描述加入。现在也可以通过上面那个完成版本里面查看动态路由相关信息,在那个版本中,动态路由已经加入。