解决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文件时,要确保使用正确的路径。如果仍然无法生效,那你可以在下方留言,我们一起探讨探讨!

相关推荐
四喜花露水25 分钟前
Vue 自定义icon组件封装SVG图标
前端·javascript·vue.js
前端Hardy35 分钟前
HTML&CSS: 实现可爱的冰墩墩
前端·javascript·css·html·css3
web Rookie1 小时前
JS类型检测大全:从零基础到高级应用
开发语言·前端·javascript
Au_ust1 小时前
css:基础
前端·css
帅帅哥的兜兜1 小时前
css基础:底部固定,导航栏浮动在顶部
前端·css·css3
工业甲酰苯胺1 小时前
C# 单例模式的多种实现
javascript·单例模式·c#
yi碗汤园1 小时前
【一文了解】C#基础-集合
开发语言·前端·unity·c#
就是个名称1 小时前
购物车-多元素组合动画css
前端·css
编程一生2 小时前
回调数据丢了?
运维·服务器·前端
丶21362 小时前
【鉴权】深入了解 Cookie:Web 开发中的客户端存储小数据
前端·安全·web