![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)
Craco Ant Design Plugin
This is a craco plugin that makes it easy to use the Ant Design UI library with create-react-app version >= 2.
Use react-app-rewired for create-react-app
version 1.
craco-antd
includes:
- Less (provided by craco-less)
babel-plugin-import
to only import the required CSS, instead of everything- A nicer way to customize the theme. Save your modified variables in
antd.customize.json
Supported Versions
craco-antd
is tested with:
react-scripts
: ^2.1.1
@craco/craco
: ^2.2.3
Installation
First, follow the beginning of the Ant Design create-react-app
Documentation to set up your app with Ant Design.
(Stop before the "Advanced Guides" section, because this plugin handles all of that for you.)
Then, follow the craco
Installation Instructions to install the craco
package, create a craco.config.js
file, and modify the scripts in your package.json
.
Then install craco-antd
:
$ yarn add craco-antd
$ npm i -S craco-antd
Usage
Here is a complete craco.config.js
configuration file that sets up Less compilation and babel-plugin-import
for create-react-app
:
const CracoAntDesignPlugin = require("craco-antd");
module.exports = {
plugins: [{ plugin: CracoAntDesignPlugin }]
};
Ant Design also allows you to customize the theme by modifying the Less variables.
View Ant Design's "Customize Theme" documentation
craco-antd
will look for a antd.customize.json
file in the root directory of your project. If this file is found, the contents will be merged into the modifyVars
option for less-loader
. For example:
{
"@primary-color": "#1DA57A",
"@link-color": "#1DA57A",
"@border-radius-base": "2px"
}
You can also customize these variables in craco.config.js
with the customizeTheme
option:
const CracoAntDesignPlugin = require("craco-antd");
module.exports = {
plugins: [
{
plugin: CracoAntDesignPlugin,
options: {
customizeTheme: {
"@primary-color": "#1DA57A",
"@link-color": "#1DA57A",
"@border-radius-base": "2px"
}
}
}
]
};
(customizeTheme
is just an alias for the modifyVars
option in less-loader
.)
Finally, you can pass a lessLoaderOptions
object if you want full control over the less-loader
options:
module.exports = {
plugins: [
{
plugin: CracoAntDesignPlugin,
options: {
lessLoaderOptions: {
modifyVars: { "@primary-color": "#1DA57A" },
strictMath: true,
noIeCompat: true
}
}
}
]
};
View the less-loader Documentation.
If you use more than one of these options to customize the theme, they are merged together in the following order:
antd.customize.json
options.customizeTheme
options.lessLoaderOptions.modifyVars
That's it! Now you can customize the Ant Design theme, and you can also compile Less files in your own app.
Large Bundle Size from Ant Design Icons
You can use the webpack-bundle-analyzer plugin to see a breakdown of all the JS and CSS in your webpack build. Here's how to add this plugin to your craco.config.js
configuration file:
const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
module.exports = {
webpack: {
plugins: [new BundleAnalyzerPlugin()]
},
plugins: [{ plugin: require("craco-antd") }]
};
If you have imported any icons from Ant Design, you will see a very large (> 500KB) entry for @ant-design/icons/lib
:
This is a problem with Ant Design v3.9.0+
, and it will be fixed in the next version. See this GitHub issue for more information. This comment talks about the fix, and here is the PR.
In the meantime, you can set up an import alias and only include the required icons.
Further Configuration
If you need to configure anything else for the webpack build, take a look at the
Configuration Overview section in the craco
README. You can use CracoAntDesignPlugin
while making other changes to babel
and webpack
, etc.
Contributing
Install dependencies:
$ yarn install
$ npm install
Run tests:
$ yarn test
Before submitting a pull request, please check the following:
- All tests are passing
- 100% test coverage
- Coverage will be printed after running tests.
- Open the coverage results in your browser:
$ open coverage/lcov-report/index.html
- All code is formatted with Prettier
- Run
prettier --write **/*.js
- If you use VS Code, I recommend enabling the
formatOnSave
option.
License
MIT