在craco中支持less和less module

1,030 阅读1分钟

什么是craco

在Creact-react-app中我们想要修改默认的webpack配置,我们可以通过eject导出配置文件进行修改,但是这样的操作是不可逆的。所以我们更推荐使用craco或react-app-rewired这样的工具来达到不eject而修改webpack的目的。

安装craco

在工程中引入craco和craco-less npm i craco npm i craco-less

修改package.json

打开 package.json文件,找到scripts字段,并修改替换成以下代码

  "scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject"
  },

然后在工程根目录下,新增craco.config.js文件, 键入以下代码

const CracoLessPlugin = require("craco-less");
const { loaderByName } = require("@craco/craco");
 
module.exports = {
  plugins: [
    {
      plugin: CracoLessPlugin,
      options: {
        modifyLessModuleRule(lessModuleRule, context) {
          // Configure the file suffix
          lessModuleRule.test = /.module.less$/;
 
          // Configure the generated local ident name.
          console.log(lessModuleRule)
          const cssLoader = lessModuleRule.use.find(loaderByName("css-loader"));
          cssLoader.options.modules = {
            localIdentName: "[local]_[hash:base64:5]",
          };
 
          return lessModuleRule;
        },
      },
    },
  ],
};

如果使用的是TypeScript编程,则在react-app-env.d.ts.文件中添加以下内容,解决模块问题

declare module '*.module.less' {
  const classes: {
    readonly [key: string]: string
  }
  export default classes
  declare module '*.less'
}

craco-less原文文档