文章目录
前言
create-react-app中配置less和别名alias,使用craco
已配置成功的demo:craco-demo
1.初始化项目
# 创建一个名称为craco-demo的react项目(基于typescript)
npx create-react-app craco-demo --template typescript
2.安装craco和craco-less
- 参考:craco
# 安装craco
yarn add craco
# 安装craco-less(若只配置alias则不需要安装craco-less)
yarn add craco-less
3.配置craco.config.js
- craco.config.js需要与package.json同级
- 参考:craco-less
// craco.config.js
const path = require('path')
const CracoLessPlugin = require('craco-less')
const { loaderByName } = require('@craco/craco')
module.exports = {
webpack: {
alias: {
'@': path.resolve(__dirname, 'src/')
}
},
plugins: [
{
plugin: CracoLessPlugin,
options: {
modifyLessModuleRule(lessModuleRule, context) {
// Configure the file suffix
lessModuleRule.test = /\.module.less$/
// Configure the generated local ident name.
const cssLoader = lessModuleRule.use.find(loaderByName('css-loader'))
cssLoader.options.modules = {
localIdentName: '[local]_[hash:base64:5]',
}
return lessModuleRule
},
modifyLessRule(lessRule, context) {
// You have to exclude these file suffixes first,
// if you want to modify the less module's suffix
lessRule.exclude = /\.less$/;
return lessRule;
},
},
},
]
}
4.创建tsconfig-base.json
- 创建tsconfig-base.json(与tsconfig.json同级)
// tsconfig-base.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@*": ["src/*"]
}
}
}
5.修改tsconfig.json
// tsconfig.json
{
"extends": "./tsconfig-base.json",
...
}
6.修改react-app-env.d.ts
/// <reference types="react-scripts" />
declare module '*.module.less' {
const classes: { readonly [key: string]: string }
export default classes
}
7.修改package.json
8.启动项目
# 启动项目
yarn start
已配置成功的demo:craco-demo
总结
使用craco配置less与别名alias