给react项目import导入less样式表,发现没生效。
查了一下资料,create-react-app脚手架安装好react工程后是无法支持less的,webpack配置css/less文件的loader的时候,默认是不开启模块化,这种模块化的方式引入,需要更改一下webpack的loader配置。
1. 安装一下webpack相关包(包的版本建议不要安装最新的)
2. 暴露依赖(webpack、babel等),运行npm run eject
运行完后,会多出两个文件config和scripts,如下
注意:运行npm run eject之前须把项目更改的文件全部提交,否则会失败,其次,此命令是一个单向的操作,一旦执行,不可逆
3. 修改webpack.config.js实现less可用
顶部添加
const lessRegex = /\.less$/;
const lessModuleRegex = /\.less$/;
找到test: cssRegex,在此前面添加以下代码
{
test: lessRegex,
exclude: lessModuleRegex,
use: getStyleLoaders(
{
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
},
'less-loader'
),
sideEffects: true,
},
{
test: lessModuleRegex,
use: getStyleLoaders(
{
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true,
getLocalIdent: getCSSModuleLocalIdent,
},
'less-loader'
),
},
4. 安装less、less-loader
运行报错 TypeError: this.getOptions is not a function
原因是less-loader版本过高了,卸载了重新安装低版本的
5. 运行的时候又报错了,options has an unknown property 'getLocalIdent'
原因是options传入了一个非法的参数getLocalIdent,这个getLocalIdent其实是modules的参数
修改成下图即可