react项目导入样式不生效,配置webpack

3,040 阅读1分钟

给react项目import导入less样式表,发现没生效。 查了一下资料,create-react-app脚手架安装好react工程后是无法支持less的,webpack配置css/less文件的loader的时候,默认是不开启模块化,这种模块化的方式引入,需要更改一下webpack的loader配置。

1. 安装一下webpack相关包(包的版本建议不要安装最新的)

image.png

2. 暴露依赖(webpack、babel等),运行npm run eject

运行完后,会多出两个文件config和scripts,如下

注意:运行npm run eject之前须把项目更改的文件全部提交,否则会失败,其次,此命令是一个单向的操作,一旦执行,不可逆

image.png

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版本过高了,卸载了重新安装低版本的

image.png

5. 运行的时候又报错了,options has an unknown property 'getLocalIdent'

原因是options传入了一个非法的参数getLocalIdent,这个getLocalIdent其实是modules的参数

image.png

修改成下图即可

image.png

6. 重新启动,发现less样式还是没有生效,搜索一番,才发现需要通过变量方式去使用

image.png

image.png

7. 修改后重新启动,终于运行成功了。。不容易。。。