在CSS模块中使用SCSS变量

时间:2016-11-23 11:32:52

标签: reactjs sass webpack css-modules react-css-modules

我有一个_color.scss文件,其中包含400种颜色作为变量。我喜欢20个组件,它们的风格需要这些颜色变量。

我使用SCSS + CSS模块构建我的样式。截至目前,我已在每个组件的_color.scss中导入此style.scss

示例:

component1.scss

@import "color.scss";

component2.scss

@import "color.scss";

component3.scss

@import "color.scss";

以前,当我使用SCSS独立版时,我会将color.scss导入我的index.scss并导入其下的所有其他样式。这样,变量将在所有组件中可用。

示例:

//index.scss
@import "color.scss";
@import "component1.scss";
@import "component2.scss";
@import "component3.scss";

现在,_color.scss下的所有变量都可以在component1.scsscomponent2.scsscomponent3.scss下使用。

有没有办法用CSS Modules + SCSS做类似的事情?一个声明全局变量的地方?

1 个答案:

答案 0 :(得分:3)

我现在使用的方式看起来很干净。所以,我将它分享给所有人。

使用sass-resources-loader

这将包括@import所有.scss个文件,使用scss时所有css modules个文件中的变量和mixin可用。

webpack@2.x.x config

...
    module: {
      rules: [
        {
          test: /\.scss$/,
          loaders: [
            'style-loader',
            'css-loader?modules&importLoaders=1&localIdentName=[path][name]__[local]__[hash:base64:10]',
            'sass-loader',
            'sass-resources-loader',
            'import-glob-loader',
            'postcss-loader',
          ],
        },
     },
     plugins: [
       new webpack.LoaderOptionsPlugin({
        options: {
          postcss: [
            autoprefixer(),
          ],
          sassResources: [
            './app/constants/_style-variables.scss', //include your scss imports here
          ],
          context: path.resolve(__dirname, '../../')
        }
      })
     ]
...