【问题标题】:babel-plugin-react-css-modules is not matching styles with styleNamebabel-plugin-react-css-modules 与 styleName 的样式不匹配
【发布时间】:2018-05-20 10:22:43
【问题描述】:

问题

我试图在我的 React 项目中使用 babel-plugin-react-css-modules 以获得更好的性能,而不是 React CSS 模块

但是,样式应用不正确。

原因

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

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

即使我们使用相同的localIdentName,生成的结果 与 css 中的选择器和 DOM 元素上的 className 不同。

(注意:在 babel-plugin-react-css-modules 中,localIdentName[path]___[name]__[local]___[hash:base64:5] 硬编码在 options.generateScopedName)

知道为什么会有 hypen-wrapper 吗?

【问题讨论】:

标签: reactjs webpack react-css-modules babel-plugin-react-css-modules


【解决方案1】:

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

原因

这是由于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'
        ]
}

【讨论】:

  • 我遇到了同样的问题,这是因为我没有以下行:localIdentName: '[path]___[name]__[local]___[hash:base64:5]'跨度>
猜你喜欢
  • 2023-01-12
  • 1970-01-01
  • 2020-05-01
  • 2021-04-02
  • 2017-05-21
  • 2017-09-04
  • 2019-04-22
  • 1970-01-01
  • 2021-07-31
相关资源
最近更新 更多