CSS模块:如何禁用文件的本地范围?

Ste*_*ven 17 webpack css-modules

我正在一个新的React项目中使用CSS模块(通过Webpack css loader),尽管它工作得很好,但我无法让ReSS Select的SCSS 工作.我想这是因为它试图创建local一个JS in react-select不知道的classNames .有没有办法导入整个.scss文件,但是全局范围而不是本地范围?

ris*_*ott 30

我通常定义两个这样的CSS加载器:

// Global CSS
// We make the assumption that all CSS in node_modules is either
// regular 'global' css or pre-compiled.
loaders.push({
    test: /\.css$/,
    include: /node_modules/,
    loader: 'style-loader!css-loader'
});

// CSS modules
loaders.push({
    test: /\.css$/,
    exclude: /node_modules/,
    loader: 'style-loader!css-loader?modules'
});
Run Code Online (Sandbox Code Playgroud)

我过去也将应用程序迁移到CSS模块,并发现根据文件扩展名定义约定很有用,例如{filename} .module.css === CSS Modules vs {filename} .css === Global CSS

// Global CSS
loaders.push({
    test: /\.css$/,
    exclude: /\.module\.css$/,
    loader: 'style-loader!css-loader'
});

// CSS modules
loaders.push({
    test: /\.module\.css$/,
    loader: 'style-loader!css-loader?modules'
});
Run Code Online (Sandbox Code Playgroud)


jav*_*sco 15

在Webpack配置中使用css loader时,通常需要?modules在查询字符串中激活已启用的CSS模块,因此:local默认情况下将激活范围.这意味着如果您想要在.selector { ... }不进行转换的情况下声明,则必须将其用于:global(.selector) {}.

由于您使用的是SASS加载程序,如果您想要包含供应商的css,可以使用它来导入它@import "~react-select".你说的问题是,这将使库中的所有选择器转换为本地.为了避免这种情况,您可以:global像使用选择器一样包含导入,例如::global { @import "~react-select"; }


Chr*_*ris 5

另一种适用于我的解决方案(从刮擦github问题),如下:

Webpack2配置(相关部分)

    {
        test: /\.css$/,
        use: [{
            loader: 'style-loader',
        }, {
            loader: 'css-loader',
            options: {
                modules: true,
            },
        }, {
            loader: 'postcss-loader',
        }],
    }
Run Code Online (Sandbox Code Playgroud)

moduleX.js

使用slick-carousel,例如,

// Import the libraries css without the module gear being applied
//
import '!style-loader!css-loader!slick-carousel/slick/slick.css';

// Import my applications css. `styles` will be the typical 
// `slide_foo_xeh54` style set of module exports 
// (depending how you have your css-loader 
// configured
//
import styles from './Slides.css';
Run Code Online (Sandbox Code Playgroud)

换句话说,所有内容都将遵循您的webpack配置文件配置的css-loader选项,除非您使用不同的加载器(!x!y)专门导入它

如果你有很多异常/全局变量,那么接受的解决方案可能会更好.