reactjs - 当 CSS 模块不在同一个 CSS 文件中时,如何通过 CSS 模块识别相同的类名
问题描述
我有一个主 CSS 文件style.styl
,带有容器:
.container
// ...
我有components.styl
一些 React 组件的另一个 CSS 文件,这些必须在容器内
.container
.componentA
// ...
.componentB
// ...
然后通过 Webpack 和 CSS 模块构建后,配置如下:
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
modules: {
localIdentName: '[name]__[local]__[contenthash:5]',
},
},
},
.container
in将style.styl
被编译为style__container__8cc45
在将编译.container
为components.styl
components__container__45aeb
现在如何使用 [contenthash:5] 将容器标识为同名
非常感谢
解决方案
谢谢,@lavor
我找到了问题的解决方案(可能不优雅)
// ...
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
modules: {
calIdentName: '[local]__[contenthash:5]',
getLocalIdent: (loaderContext, localIdentName, localName, options) => {
if (!options.context) {
options.context = loaderContext.rootContext;
}
let request = null;
if (localName === 'container') {
// do not change the value of `request` when localName is 'container'
request = 'src/assets/css/style.styl';
} else {
request = path
.relative(options.context, loaderContext.resourcePath)
.replace(/\\/g, '/');
}
options.content = `${options.hashPrefix + request}+${localName}`;
localIdentName = localIdentName.replace(/\[local\]/gi, localName);
const hash = loaderUtils.interpolateName(
loaderContext,
localIdentName,
options
);
return hash
.replace(new RegExp('[^a-zA-Z0-9\\-_\u00A0-\uFFFF]', 'g'), '-')
.replace(/^((-?[0-9])|--)/, '_$1');
},
},
},
// ...
推荐阅读
- python - 在 colab 中上传“.csv”文件时如何解决“EmptyDataError”?
- java - 获取适合矩形内的所有正方形大小?‽?
- acumatica - 如何在另一个选项卡中传递 Artran 行
- python - 使用 Anaconda 安装 OSMnx
- git - git reset --HARD 在公开共享的分支上的后果?
- python - 如何用 PyGame 让球从墙上反弹?
- scala - 嵌入 scala 2.13.x REPL
- javascript - 在 https.onCall 云函数中的 request.post 回调中将 HttpsException 发送到 Android 应用
- reactjs - React DevTools Profiler 中未显示任何状态
- angular - 创建抽象类 DomSanitizer 的实例