欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 一个关于 CSS Modules 的陷阱

一个关于 CSS Modules 的陷阱

2024/11/30 6:46:59 来源:https://blog.csdn.net/z284747/article/details/144012954  浏览:    关键词:一个关于 CSS Modules 的陷阱

我在引用 less 文件样式的时候,发现

index.less

.drag_upload {width: 100%;height: 90vh;padding: 20px;
}

index.jsx

import React, { useState, useEffect } from 'react';
import styles from './index.less';export default ({
}) => {return (<div className={styles.drag_upload}>test</div>);
};

经查发现我没有开启模块化,所以使用 styles 变量引入样式没有用:

使用这种全局普通样式就有用

import React, { useState, useEffect } from 'react';
import styles from './index.less';export default ({
}) => {return (<div className="drag_upload">test</div>);
};

但是我全局普通样式容易影响其他组件的样式,所以我需要开启模块化功能,只让当前的 index.less 在引入的文件生效,不影响其他组件样式。

参考 webpack 官网配置开启 CSS Modules 模块化功能:

在这里插入图片描述
这样我以为没问题了,结果发现我要写的那块样式确实生效了,styles 变量起作用了,但是我的项目主页的图片显示不出来了。

经查发现是 CSS Modules 与 Less 配合存在问题,如 webpack 官网 提到的 CSS modules 陷阱
在这里插入图片描述
github 参考:
https://github.com/webpack-contrib/less-loader/issues/109
https://github.com/webpack-contrib/less-loader/pull/121
https://github.com/wall-wxk/blog/issues/8

主要是这样解决:

在这里插入图片描述

npm 网站参考:
https://www.npmjs.com/package/resolve-url-loader
在这里插入图片描述

我的项目中是这样配置的:

在这里插入图片描述
在这里插入图片描述

注意:
include 很重要,最好写上要生效的路径。
就像我下面这段 antd 的样式就不能开启 CSS Modules , 就算配置了 resolve-url-loader ,样式也会乱掉 或者 和前面一样出问题
在这里插入图片描述

**注意:**开启 sourceMap 很重要,不配置 sourceMap 会报如下错误:

Module build failed (from ./node_modules/resolve-url-loader/index.js):
Error: resolve-url-loader: error processing CSSa valid source-map is not present (ensure preceding loaders output a source-map)

以及如果 index.less 文件没有写东西,是个空文件夹,也会报如下错误:

resolve-url-loader: webpack misconfiguration
webpack or the upstream loader did not supply a source-map

所以不能写空的 less 文件

到这里问题就完全解决了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com