【问题标题】:Using CSS Modules and 3rd party packages使用 CSS 模块和 3rd 方包
【发布时间】:2016-11-18 04:05:59
【问题描述】:

这是我的webpack.config.js 文件的相关部分:

module: {
    loaders: [
        {
            test: /\.css$/,
            exclude: /node_modules/,
            loaders: [
                "style-loader?sourceMap",
                "css-loader?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]"
            ]
        },
        {
            test: /\.jsx?$/,
            exclude: /node_modules/,
            loader: "babel-loader"
        }
    ]
}

当我编写自己的 CSS 并将其与 React 组件一起使用时,这非常有用。但是,我最近尝试使用 React Datepicker,它带有自己的 css 文件,可以导入到使用 React Datepicker 的组件中。

如何修改我的webpack.config.js 文件,以便我导入的 React Datepicker css 文件不会被具有本地类名的 CSS 模块转换?换句话说,是否可以配置 webpack,使其将 3rd 方样式导入全局范围,并将我自己的样式导入本地范围?

另外,如果我想编写自己的自定义样式来覆盖 React Datepicker 样式,我该如何做才能使这些样式也处于全局范围内?

【问题讨论】:

    标签: javascript css reactjs webpack css-modules


    【解决方案1】:

    您的设置问题是exclude: /node_modules/。从您的 css 加载程序设置中删除此行,您的 React-datepicker 应该可以工作。

    如果要覆盖第三方组件的默认样式,可以

    1. 查看库是否默认支持,有些提供主题选项
    2. 或者,您始终可以找出库生成的 CSS,然后用您自己的规则覆盖这些规则。

    编辑

    如果您必须显式导入 css,您可以创建一个新的加载器,如下所示:

    {
      test: /\.css$/,
      exclude: /node_modules/,
      loader: 'style!css?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]'
    },
    {
      test: /\.css$/,
      include: /node_modules/,
      loader: 'style!css'
    }
    

    【讨论】:

    • 删除 node_modules 的问题是导入的 3rd 方样式将被转换为本地化的 css 名称。例如,“react-date-picker”变成“app_component_react_datepicker_12345”
    • 库是否要求您专门导入css文件?大多数时候你不需要,因为样式是由它自己内部的库处理的。你只需要将它包含在你的 webpack 加载器中。
    • 对于 react datepicker,您实际上确实需要将样式显式导入到您的 react 组件中
    • 我明白了,那么你已经创建了一个新的加载器。查看修改。
    • 我会试试看 - 你是否也知道如何在使用 CSS 模块时导入全局范围的 css?
    【解决方案2】:

    使用 :global(.classname) 您可以覆盖外部类名。

    甚至可以覆盖第 3 方库 css。

    :global(.classname) {
      background-color: #fff;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2016-10-11
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      相关资源
      最近更新 更多