React 安装使用 Less(详细流程,包含 webpack、craco 方式)

一、简介

  • React 项目开发中可能会使用到 Less、Sass 等样式预处理器,create-react-app 创建的 React 项目,默认就是支持 Sass 的。如果需要使用 Less 则需要额外手动安装配置。

二、方式一:webpack.config.js 配置(不推荐)

  • 由于需要暴露隐藏的配置文件,不利于项目升级,不推荐使用。

  • 安装 less 与 less-loader

    sh 复制代码
    $ npm i less less-loader -S
    # 或
    $ yarn add less less-loader -S
  • 暴露 webpack 配置文件。(提示:该操作不可逆,长远考虑不推荐使用该方案)

    sh 复制代码
    $ npm run eject
  • 修改 webpack.config.js 配置文件

    首先要找到以下代码,可以使用 VSCode 查询功能直接找到,搜索内容为 sass:

    js 复制代码
    // style files regexes
    const cssRegex = /\.css$/;
    const cssModuleRegex = /\.module\.css$/;
    const sassRegex = /\.(scss|sass)$/;
    const sassModuleRegex = /\.module\.(scss|sass)$/;

    仿照格式,在下面配置 less:

    js 复制代码
    // style files regexes
    const cssRegex = /\.css$/;
    const cssModuleRegex = /\.module\.css$/;
    const sassRegex = /\.(scss|sass)$/;
    const sassModuleRegex = /\.module\.(scss|sass)$/;
    const lessRegex = /\.less$/;
    const lessModuleRegex = /\.module\.less$/;

    继续向下搜索 sass,能够找到以下代码:

    js 复制代码
    ...
    {
      test: sassRegex,
      exclude: sassModuleRegex,
      use: getStyleLoaders(
        {
          importLoaders: 3,
          sourceMap: isEnvProduction
            ? shouldUseSourceMap
            : isEnvDevelopment,
          modules: {
            mode: 'icss',
          },
        },
        'sass-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: sassModuleRegex,
      use: getStyleLoaders(
        {
          importLoaders: 3,
          sourceMap: isEnvProduction
            ? shouldUseSourceMap
            : isEnvDevelopment,
          modules: {
            mode: 'local',
            getLocalIdent: getCSSModuleLocalIdent,
          },
        },
        'sass-loader'
      ),
    },
    ...

    和之前配置一样,仿照 sass 配置,添加 less 配置:

    js 复制代码
    ...
    // config less
    {
      test: lessRegex,
      exclude: lessModuleRegex,
      use: getStyleLoaders(
        {
          importLoaders: 3,
          sourceMap: isEnvProduction
            ? shouldUseSourceMap
            : isEnvDevelopment,
        },
        'less-loader'
      ),     
      sideEffects: true,
    },
    {
      test: lessModuleRegex,
      use: getStyleLoaders(
        {
          importLoaders: 3,
          sourceMap: isEnvProduction
            ? shouldUseSourceMap
            : isEnvDevelopment,
          modules: {
            getLocalIdent: getCSSModuleLocalIdent,
          },
        },
        'less-loader'
      ),
    },
    ...
  • 到这就完成了 webpack.config.js 配置 less,重启项目则可使用 less 样式了。

三、方式二:craco.config.js 配置(推荐)

  • 安装 craco

    sh 复制代码
    $ npm i @craco/craco
    # 或
    $ yarn add @craco/craco
  • 安装 less 与 less-loader

    sh 复制代码
    $ npm i less less-loader -S
    # 或
    $ yarn add less less-loader -S
  • 修改 package.json 文件

    js 复制代码
    "scripts": {
    -   // "start": "react-scripts start",
    -   // "build": "react-scripts build",
    -   // "test": "react-scripts test",
    +   "start": "craco start",
    +   "build": "craco build",
    +   "test": "craco test",
        "eject": "react-scripts eject"
    }
  • 补充:下载装饰器(可选,看情况使用)

    sh 复制代码
    $ npm i @babel/plugin-proposal-decorators -S
    # 或
    $ yarn add @babel/plugin-proposal-decorators -S
  • 配置 croca.config.js 文件

    js 复制代码
    const path = require('path')
    const lessPlugin = require("craco-less");
    
    module.exports = {
      // 插件
      plugins: [
        {
          plugin: lessPlugin,
          options: {
            lessLoaderOptions: {
              lessOptions: {
                modifyVars: { "@primary-color": "#1DA57A" },
                javascriptEnabled: true
              }
            }
          }
        }
      ],
      // webpack 配置
      webpack: {
        // 配置别名
        alias: {
          // 约定:使用 @ 表示 src 文件所在路径
          "@": path.resolve(__dirname, "src")
        }
      },
      babel: {
        plugins: [["@babel/plugin-proposal-decorators", { legacy: true }]]
      }
    }
相关推荐
Highcharts.js6 小时前
React 中原生支持使用 JSX 组件配置自定义表格 Highcharts Grid
前端·javascript·react.js·前端框架·jsx·highcharts·自定义表格
JudithHuang8 小时前
React 嵌套路由与布局
前端·react.js·arcgis·react·react router
前端小D11 小时前
React Native项目开发(iOS侧为例)
javascript·react native·react.js
志尊宝1 天前
AI原生前端开发(042):AI辅助的路由设计与优化
javascript·react.js·ai-native
znsoft2 天前
MaClaw(码卡龙)技术拆解:一个 Go + React 的可自进化智能体平台
开发语言·react.js·golang
濮水大叔2 天前
React/Next.js 生态里,有没有 CabloyJS 这样的全栈框架?
react.js·全栈·next.js
前端小D2 天前
React Native Android 项目搭建
android·react native·react.js
Highcharts.js3 天前
Highcharts 集成到 React 或 Vue 项目中时,如何高效地使用 TypeScript技巧?
vue.js·人工智能·react.js·typescript·前端框架·highcharts
liuchangng4 天前
React 19 + Vite 6 实战:从教材 PDF 到 866 词间隔重复单词 App
前端·react.js·pdf·vite·开源项目
鸿蒙开发5 天前
Three.js 首帧卡顿排查:compileAsync 之后,为什么还会停一下?
react.js·three.js