React 项目暴露webpack配置文件按需加载antd+less+自定义主题

React项目是使用yarn eject暴露配置文件,需要按需加载antd组件样式,并且使用.less文件。需要在配置文件中设置。

运行yarn add less less-loader

  • 添加lessless-loader
  • 需要把less的版本降低到2.7.3版本,否则在运行项目中可能会报错
    • yarn add less@2.7.3降低版本号
  • webpack.config.js文件中进行配置
/*
安装sass 的配置复制一份修改成less配置
*/
const cssRegex = /\.css$/;
const cssModuleRegex = /\.module\.css$/;
const sassRegex = /\.(scss|sass)$/;
const sassModuleRegex = /\.module\.(scss|sass)$/;

const lessRegex = /\.less$/;
const lessModuleRegex = /\.module\.less$/;


=============================================================================
{
              test: sassModuleRegex,
              use: getStyleLoaders(
                {
                  importLoaders: 2,
                  sourceMap: isEnvProduction && shouldUseSourceMap,
                  modules: true,
                  getLocalIdent: getCSSModuleLocalIdent,
                },
                'sass-loader'
              ),
            },
/*
	复制sass的配置   修改成less
*/

            {
              test: lessRegex,
              exclude: lessModuleRegex,
              use: getStyleLoaders(
                {
                  importLoaders: 2,
                  sourceMap: isEnvProduction && shouldUseSourceMap,
                },
                'less-loader'
              ),
              // Don't consider CSS imports dead code even if the
              // containing package claims to have no side effects.
              // Remove this when webpack adds a warning or an error for this.
              // See https://github.com/webpack/webpack/issues/6571
              sideEffects: true,
            },
            // Adds support for CSS Modules, but using SASS
            // using the extension .module.scss or .module.sass
            {
              test: lessModuleRegex,
              use: getStyleLoaders(
                {
                  importLoaders: 2,
                  sourceMap: isEnvProduction && shouldUseSourceMap,
                  modules: true,
                  getLocalIdent: getCSSModuleLocalIdent,
                },
                'less-loader'
              ),
            },

安装babel-plugin-import

package.json文件中找到babel,在presets下方写上plugins的配置

"babel": {
   "presets": [
     "react-app"
   ],
   "plugins": [
     [
       "import",
       {
         "libraryName": "antd",
         "style": true
       }
     ]
   ]
 }

自定义主题

webpack.config,js中搜索preProcessor 找到下面的位置并修改

   if (preProcessor) {
      loaders.push(
        {
          loader: require.resolve('resolve-url-loader'),
          options: {
            sourceMap: isEnvProduction && shouldUseSourceMap,
          },
        },
        {
          loader: require.resolve(preProcessor),
          options: {
            sourceMap: true,
            javascriptEnabled: true,	//新添加
            modifyVars: { '@primary-color': '#1DA57A' }, // 自定义主题
          },
        }
      );
    }
    return loaders;
这样不需要再引用antd中的css样式,添加antd的组件,运行项目就能看到效果
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
步骤如下: 1. 在阿里iconfont官网上选择所图标,添加到购物车中,并下载对应的图标字体文件。 2. 将字体文件复制到项目中的一个合适的目录下,比如 `src/assets/fonts`。 3. 在项目中安装 `@iconify/react` 和 `@iconify/icons` 包,用于渲染图标。 ``` npm install @iconify/react @iconify/icons --save ``` 4. 在 `webpack.config.js` 文件中配置字体文件的加载器,以及 `less-loader` 和 `css-loader` 的配置。 ``` const IconfontWebpackPlugin = require('iconfont-webpack-plugin'); module.exports = { module: { rules: [ { test: /\.(woff|woff2|eot|ttf|otf)$/, use: [ { loader: 'file-loader', options: { outputPath: 'fonts' } } ] }, { test: /\.less$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'less-loader', options: { lessOptions: { modifyVars: { 'hack': `true;@import "${require.resolve('antd/lib/style/color/colorPalette.less')}";`, 'icon-font-path': '"../assets/fonts/iconfont"' } } } } ] } ] }, plugins: [ new IconfontWebpackPlugin({ resolve: { extensions: ['.tsx'] } }) ] }; ``` 其中,`IconfontWebpackPlugin` 是用于自动将 `@iconify/icons` 中的图标转换成 React 组件,并导出到指定目录的插件。 5. 在代码中使用图标: ``` import { Icon } from '@iconify/react'; import userIcon from '@iconify/icons-ant-design/user'; const MyComponent = () => { return ( <div> <Icon icon={userIcon} /> </div> ); }; ``` 其中,`userIcon` 是从 `@iconify/icons-ant-design` 包中导入的,可以替换成其他要使用的图标。`Icon` 组件会自动根据图标名称找到对应的字体文件,并渲染出图标。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值