ant design - huge imports

空扰寡人 提交于 2019-11-30 08:22:29

At the moment, huge part of antd dist is svg icons.
There is no official way to deal with it yet (check the issue on github).

But a workaround exists.

  1. Adapt webpack to resolve icons differently. In your webpack config:
module.exports = {   //...   resolve: {     alias: {       "@ant-design/icons/lib/dist$": path.resolve(__dirname, "./src/icons.js")     }   } }; 
  1. Create icons.js in the folder src/ or wherever you want it. Be sure it matches the alias path!
    In this file you define which icons antd should include.
export {   default as DownOutline } from "@ant-design/icons/lib/outline/DownOutline"; 

It's also possible to do this with react-app-rewire (create-react-app modifications) within config-overwrites.js

1) Prevent antd to load the all moment localization. Add webpack plugin and configure it in webpack.config.js like the follow:

plugins: [     new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /ru/), ], resolve: {     alias: {moment: `moment/moment.js`} }, target: `web` } 

2) Use the same moment version as in antd library.

3) Use modularized antd Use babel-plugin-import

// .babelrc or babel-loader option {   "plugins": [     ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]     // `style: true` for less   ] } 

I use BundleAnalyzerPlugin to analyze the bundle.

plugins: [new BundleAnalyzerPlugin()]

Looking at the docs https://ant.design/docs/react/getting-started#Import-on-Demand there is a recommedation to import individual components on demand. So, you can try and replace

import { Button} from 'antd'  

with

import Button from 'antd/lib/button' 

Those few components are certainly not 1.2M together. Looks like you are importing the whole library when you only need a few components.

To get antd to load only the needed modules you should use babel-plugin-import. Check your console log for the "You are using a whole package of antd" warning described at that link.

Check out the docs for Create-React-App for how to implement it if you're using CRA.

Try using code splitting using webpack and react router. It will help you to load the modules asynchronously. This is the only solution helped me to improve the page load time when using ant framework.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!