解决create-react-app 中less不生效

如果在由create-react-app创建的项目中less样式不生效,通常这是因为create-react-app默认不支持less,你需要进行一些配置来启用对less的支持。

发现通过create-react-app构建的react应用不支持less样式,所以这里提供了三种方法以作大家参考。方法一 推荐在刚构建的时候使用,如果你已经写了很多代码,你会发现需要删除很多文件才能成功!另外两种方法类似,个人推荐第三种方案!

1.方案

方法一:暴露webpack.config.js配置

1.安装less和less-loader

js 复制代码
npm install less less-loader

或者如果使用yarn

js 复制代码
 yarn add less less-loader

2.通过 npm run eject暴露配置

js 复制代码
npm run eject

2.找到webpack.config.js,添加如下内容:

js 复制代码
//引入 less 文件的配置
const lessRegex = /.less$/;
const lessModuleRegex = /.module.less$/;   

3.然后找到 webpack.config.js 文件中的 return --> module.rules.oneOf 部分,添加以下代码:

js 复制代码
{
  test: lessRegex,
  exclude: lessModuleRegex,
  use: getStyleLoaders(
      {
        importLoaders: 4, // 用于决定css文件中读取到@import时被外层数组中哪个处理
        sourceMap:  isEnvProduction
            ? shouldUseSourceMap
            : isEnvDevelopment,
        modules: {
          mode: 'icss',
        },
      },
      'less-loader'
  ),
  sideEffects: true, // 允许通过配置,标识代码是否有副作用
},
{
  test: lessModuleRegex,
  use: getStyleLoaders(
      {
        importLoaders: 4,
        sourceMap:  isEnvProduction
            ? shouldUseSourceMap
            : isEnvDevelopment,
        modules: {
          mode: 'local',
          getLocalIdent: getCSSModuleLocalIdent,
        }
      },
      'less-loader'
  ),
},

方法二:使用cracocreate-react-app配置重写器)

  1. 安装cracoless以及craco-less插件:

    js 复制代码
    npm install @craco/craco craco-less less

    或者如果使用yarn

    js 复制代码
    yarn add @craco/craco craco-less less
  2. 在项目根目录中创建一个craco.config.js文件,添加以下内容:

    js 复制代码
    const CracoLessPlugin = require('craco-less');
    
    module.exports = {
      plugins: [
        {
          plugin: CracoLessPlugin,
          options: {
            lessLoaderOptions: {
              lessOptions: {
                modifyVars: { '@primary-color': '#1DA57A' }, // 可以在此修改默认的主题变量
                javascriptEnabled: true,
              },
            },
          },
        },
      ],
    };
  3. 修改package.json中的脚本命令,使用craco替代react-scripts

    js 复制代码
    "scripts": {
      "start": "craco start",
      "build": "craco build",
      "test": "craco test",
      "eject": "react-scripts eject"
    }
  4. 现在,你可以在项目中使用.less文件,并像使用.css文件一样导入它们。

方法三:使用customize-crareact-app-rewired

  1. 安装react-app-rewiredcustomize-cra以及less-loader

    js 复制代码
    npm install react-app-rewired customize-cra less-loader less

    或者如果使用yarn

    js 复制代码
    yarn add react-app-rewired customize-cra less-loader less
  2. 在项目根目录中创建一个config-overrides.js文件,添加以下内容:

    js 复制代码
    const { override, addLessLoader } = require('customize-cra');
    
    module.exports = override(
      addLessLoader({
        lessOptions: {
          javascriptEnabled: true,
        },
      })
    );
  3. 修改package.json中的脚本命令,使用react-app-rewired替代react-scripts

    js 复制代码
    "scripts": {
      "start": "react-app-rewired start",
      "build": "react-app-rewired build",
      "test": "react-app-rewired test",
      "eject": "react-scripts eject"
    }
  4. 你现在应该可以在项目中使用.less文件了。

注意: 在使用这些工具时,请确保检查它们与create-react-app的当前版本兼容性,因为随着新版本的发布,可能会有所变化。

2.总结

使用上述任一方法后,您的项目应该能够支持less。记住,在你的组件中导入.less文件时,要确保使用正确的路径。如果仍然无法生效,那你可以在下方留言,我们一起探讨探讨!

相关推荐
浮华似水20 分钟前
简洁之道 - React Hook Form
前端
正小安2 小时前
如何在微信小程序中实现分包加载和预下载
前端·微信小程序·小程序
_.Switch4 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一路向前的月光4 小时前
Vue2中的监听和计算属性的区别
前端·javascript·vue.js
长路 ㅤ   4 小时前
vite学习教程06、vite.config.js配置
前端·vite配置·端口设置·本地开发
长路 ㅤ   4 小时前
vue-live2d看板娘集成方案设计使用教程
前端·javascript·vue.js·live2d
Fan_web4 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
安冬的码畜日常4 小时前
【CSS in Depth 2 精译_044】第七章 响应式设计概述
前端·css·css3·html5·响应式设计·响应式
莹雨潇潇5 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
Jiaberrr5 小时前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui