gpt4 book ai didi

reactjs - babel-plugin-react-css-modules 与 styleName 不匹配样式

转载 作者:行者123 更新时间:2023-12-03 14:13:29 27 4
gpt4 key购买 nike

问题

我正在尝试使用babel-plugin-react-css-modules在我的 React 项目中,与 React CSS 模块相比,可以获得更好的性能。

但是,样式未正确应用。

原因

<style>中的版本标签用奇怪的连字符包裹,例如:

  • <style>标签:-components-Foo-___Foo__foo___1fcIZ-
  • 在 DOM 上元素类名称:components-Foo-___Foo__foo___1fcIZ

Even if we are using the same localIdentName, the generated results are different from selectors in css and className on DOM element.

(Note: In babel-plugin-react-css-modules, the localIdentName is [path]___[name]__[local]___[hash:base64:5] as hard-coded in options.generateScopedName)

知道为什么会有连字符包装器吗?

最佳答案

经过一番努力,我自己找到了解决方案。

原因

这是由于 css-loader 的一个怪癖造成的:如果 localIdentName 选项周围有双引号,它将用连字符包裹生成的类名。

工作示例

因此,不要在 webpack 配置中执行此操作:

{
test: /\.(scss|sass)$/,
use: [
'style-loader?sourceMap',
'css-loader?modules="true"&importLoaders="1"&localIdentName="[path]___[name]__[local]___[hash:base64:5]"',
'sass-loader?sourceMap',
],
},

这样做:

{
test: /\.(scss|sass)$/,
use: [
'style-loader?sourceMap',
'css-loader?modules="true"&importLoaders="1"&localIdentName=[path]___[name]__[local]___[hash:base64:5]',
'sass-loader?sourceMap',
],
},

或者如果您使用 Webpack 2+ 则更好

{
test: /\.(scss|sass$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 1,
modules: true,
sourceMap: true,
localIdentName: '[path]___[name]__[local]___[hash:base64:5]'
}
},
'sass-loader'
]
}

关于reactjs - babel-plugin-react-css-modules 与 styleName 不匹配样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com