eject后使用babel-plugin-import按需引入antd样式

在文件顶部引入 antd/dist/antd.css实际上加载了全部的 antd 组件的样式(对前端性能是个隐患)。 babel-plugin-import 是一个用于按需加载组件代码和样式的 babel 插件(原理

$ yarn add babel-plugin-import -D

修改 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": "lib", "style": true }]
+    ]
  }

重新执行 npm start,样式重新生效

  • webpack.config.js
const lessRegex = /\.less$/;
const lessModuleRegex = /\.module\.less$/;
{
              test: lessRegex,
              exclude: lessModuleRegex,
              use: getStyleLoaders(
                {
                  importLoaders: 2,
                  sourceMap: isEnvProduction && shouldUseSourceMap
                },
                'less-loader'
              ),
              sideEffects: true
            },
            {
              test: lessModuleRegex,
              use: getStyleLoaders(
                {
                  importLoaders: 2,
                  sourceMap: isEnvProduction && shouldUseSourceMap,
                  modules: true,
                  getLocalIdent: getCSSModuleLocalIdent
                },
                'less-loader'
              )
            },
if (preProcessor) {
      let loader = {
        loader: require.resolve(preProcessor),
        options: {
          sourceMap: shouldUseSourceMap
        }
      };
      if (preProcessor === 'less-loader') {
        loader.options.lessOptions = {
          javascriptEnabled: true,
          modifyVars: { 'primary-color': '#eeee' }
        }
      }
      loaders.push(loader);
    }
    return loaders;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。