【问题标题】:How do react-css-modules (babel) and css-loader (webpack) work together?react-css-modules (babel) 和 css-loader (webpack) 如何协同工作?
【发布时间】:2021-07-14 07:32:02
【问题描述】:

当同时使用 webpack 和 babel 时,需要同时配置两者才能使用 React CSS 模块。例如:

webpack.config.js 需要这样的规则:

{
  // Translates CSS into CommonJS modules
  loader: 'css-loader',
  options: {
    modules: {
      mode: "local",
      localIdentName: CSS_CLASS_NAME_PATTERN,
    },
  sourceMap: true
}

babel.config.js 需要这样的插件:

[
  'react-css-modules',
  {
    generateScopedName: CSS_CLASS_NAME_PATTERN,
    filetypes: {
      '.scss': {
        syntax: 'postcss-scss',
        plugins: ['postcss-nested']
      }
    },
  }
]

为什么需要在两个地方配置 CSS 模块?两者如何协同工作? IE。以什么顺序发生什么?

【问题讨论】:

    标签: babeljs webpack-5 babel-plugin-react-css-modules


    【解决方案1】:

    他们没有。 css-loader 做自己的事:CSS 中的类名转换,以及通过原始名称和生成名称之间的映射替换 JS 代码中的 CSS 导入。

    babel-plugin-react-css-modules 独立工作,它用正确生成的名称替换 className 反应组件的 styleName 属性。为此,它独立于css-loader 计算类名映射,这就是为什么它需要与css-loader 匹配的单独配置,这就是为什么在其创建者放弃几年后它与最新的css-loader (css -loader 改变了内部类名生成逻辑)。

    无耻的自我宣传:我维护一个up-to-date fork of babel-plugin-react-css-modules,它解决了与最新css-loader 版本的兼容性问题。

    【讨论】:

    • 为什么不向维护不善的原始仓库发送 PR?当前的维护者根据我最近的经验审查 PR。
    • 不...原始插件在 2020 年 8 月失去了与 css-loader 的兼容性,随着 css-loader@4.0.0 的发布,“维护者”甚至花了四个月的时间才对它所在的线程发表评论被举报:github.com/gajus/babel-plugin-react-css-modules/issues/291 我只用了几天时间 fork、fix 和发布自己的版本¯\_(ツ)_/¯
    猜你喜欢
    • 2018-04-04
    • 2018-05-18
    • 2017-07-15
    • 2021-07-31
    • 2019-05-19
    • 2021-04-02
    • 2018-10-28
    • 2019-10-29
    • 2020-05-02
    相关资源
    最近更新 更多