温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

在create-react-app中如何使用less与antd按需加载

发布时间:2021-08-10 10:06:40 来源:亿速云 阅读:227 作者:小新 栏目:web开发

这篇文章将为大家详细讲解有关在create-react-app中如何使用less与antd按需加载,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

使用antd按需加载

使用react-app-rewired对 create-react-app 的默认配置进行自定义

1、yarn add react-app-rewired --dev

/* package.json */ "scripts": { -  "start": "react-scripts start", +  "start": "react-app-rewired start", -  "build": "react-scripts build", +  "build": "react-app-rewired build", -  "test": "react-scripts test --env=jsdom", +  "test": "react-app-rewired test --env=jsdom", }

2.然后在项目根目录创建一个 config-overrides.js 用于修改默认配置。

module.exports = function override(config, env) {  // do stuff with the webpack config...  return config; };

使用 babel-plugin-import

babel-plugin-import 是一个用于按需加载组件代码和样式babel 插件(原理),现在我们尝试安装它并修改config-overrides.js 文件

1.yarn add babel-plugin-import --dev

+ const { injectBabelPlugin } = require('react-app-rewired');  module.exports = function override(config, env) { +  config = injectBabelPlugin(['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }], config);   return config;  };

或者也可修改

{       test: /\.(js|jsx|mjs)$/,       include: paths.appSrc,       loader: require.resolve('babel-loader'),       options: {        plugins: [         ['import', { libraryName: 'antd', style: true }],        ],        // This is a feature of `babel-loader` for webpack (not Babel itself).        // It enables caching results in ./node_modules/.cache/babel-loader/        // directory for faster rebuilds.        cacheDirectory: true,       },      },

自定义主题

yarn add react-app-rewire-less --dev

 const { injectBabelPlugin } = require('react-app-rewired'); + const rewireLess = require('react-app-rewire-less');  module.exports = function override(config, env) { -  config = injectBabelPlugin(['import', { libraryName: 'antd', style: 'css' }], config); +  config = injectBabelPlugin(['import', { libraryName: 'antd', style: true }], config); +  config = rewireLess.withLoaderOptions({ +   modifyVars: { "@primary-color": "#1DA57A" }, +  })(config, env);   return config;  };

参考链接:https://ant.design/docs/react/use-with-create-react-app-cn

使用less

如果已经配置react-app-rewire-less,则无需再进行此操作

1.npm install less-loader less --save-dev
2.修改node_modules/react_script/config下的webpack.config.dev.js 和 webpack.config-prod.js 配置文件

  • test: /.css$/ 改为 /.(css|less)$/

  • test: /.css$/ 的 use 数组配置增加 less-loader

{  test: /\.(css|less)$/,  use: [   require.resolve('style-loader'),   {    loader: require.resolve('css-loader'),    options: {     importLoaders: 1,    },   },   {    loader: require.resolve('postcss-loader'),    options: {     // Necessary for external CSS imports to work     // https://github.com/facebookincubator/create-react-app/issues/2677     ident: 'postcss',     plugins: () => [      require('postcss-flexbugs-fixes'),      autoprefixer({       browsers: [        '>1%',        'last 4 versions',        'Firefox ESR',        'not ie < 9', // React doesn't support IE8 anyway       ],       flexbox: 'no-2009',      }),     ],    },   },   {    loader: require.resolve('less-loader') // compiles Less to CSS   }  ], },

使用css Module

antd 和 css modules 不能混用,针对antd的css 单独写一条loader的规则,不开启 css modules。

使用 exclude 和 include 配置,修改webpack.config.dev.js 和 webpack.config-prod.js 配置文件 (尽量不要使用less-loader 来处理css文件,在与antd一起使用时可能出现错误,单独写一条规则)

{       test: /\.css$/,       exclude: /node_modules|antd\.css/,       use: [        require.resolve('style-loader'),        {         loader: require.resolve('css-loader'),         options: {          importLoaders: 1,          modules: true,  // 新增对css modules的支持          localIdentName: '[name]__[local]__[hash:base64:5]',         },        },        {         loader: require.resolve('postcss-loader'),         options: {          // Necessary for external CSS imports to work          // https://github.com/facebookincubator/create-react-app/issues/2677          ident: 'postcss',          plugins: () => [           require('postcss-flexbugs-fixes'),           autoprefixer({            browsers: [             '>1%',             'last 4 versions',             'Firefox ESR',             'not ie < 9', // React doesn't support IE8 anyway            ],            flexbox: 'no-2009',           }),          ],         },        },       ],      },      {       test: /\.less$/,       exclude: /node_modules|antd\.less/,       use: [        require.resolve('style-loader'),        {         loader: require.resolve('css-loader'),         options: {          importLoaders: 1,          modules: true,  // 新增对css modules的支持          localIdentName: '[name]__[local]__[hash:base64:5]',         },        },        {         loader: require.resolve('postcss-loader'),         options: {          // Necessary for external CSS imports to work          // https://github.com/facebookincubator/create-react-app/issues/2677          ident: 'postcss',          plugins: () => [           require('postcss-flexbugs-fixes'),           autoprefixer({            browsers: [             '>1%',             'last 4 versions',             'Firefox ESR',             'not ie < 9', // React doesn't support IE8 anyway            ],            flexbox: 'no-2009',           }),          ],         },        },        {         loader: require.resolve('less-loader') // compiles Less to CSS        },       ],      },      {       test: /\.(css)$/,       include: /node_modules|antd\.css/,       use: [        require.resolve('style-loader'),        {         loader: require.resolve('css-loader'),         options: {          importLoaders: 1,         },        },        {         loader: require.resolve('postcss-loader'),         options: {          // Necessary for external CSS imports to work          // https://github.com/facebookincubator/create-react-app/issues/2677          ident: 'postcss',          plugins: () => [           require('postcss-flexbugs-fixes'),           autoprefixer({            browsers: [             '>1%',             'last 4 versions',             'Firefox ESR',             'not ie < 9', // React doesn't support IE8 anyway            ],            flexbox: 'no-2009',           }),          ],         },        },       ],      },      {       test: /\.(less)$/,       include: /node_modules|antd\.less/,       use: [        require.resolve('style-loader'),        {         loader: require.resolve('css-loader'),         options: {          importLoaders: 1,         },        },        {         loader: require.resolve('postcss-loader'),         options: {          // Necessary for external CSS imports to work          // https://github.com/facebookincubator/create-react-app/issues/2677          ident: 'postcss',          plugins: () => [           require('postcss-flexbugs-fixes'),           autoprefixer({            browsers: [             '>1%',             'last 4 versions',             'Firefox ESR',             'not ie < 9', // React doesn't support IE8 anyway            ],            flexbox: 'no-2009',           }),          ],         },        },        {         loader: require.resolve('less-loader') // compiles Less to CSS        },       ],      },

关于“在create-react-app中如何使用less与antd按需加载”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI