Webpack 3 + Sass Loader:不能将scss用作模块

时间:2018-06-29 13:45:36

标签: reactjs webpack sass

我正在使用Webpack 3 + Sass Loader + Sass Resources Loader来构建多主题React App。

这是我的webpack.config:

 {
test: /\.css$/,
exclude: /node_modules/,
loader: ExtractTextPlugin.extract({
  fallback: 'style-loader',
  use: [
    {
      loader: 'css-loader',
      options: {
        importLoaders: 1,
        modules: true,
        minimize: IS_PRODUCTION,
        sourceMap: IS_DEVELOPMENT,
        localIdentName: IS_DEVELOPMENT ? '[name]__[local]__[hash:8]' : '[hash:8]'
      },
    },
    {
      loader: 'postcss-loader',
      options: {
        sourceMap: IS_DEVELOPMENT,
        plugins: postCssPlugins,
      }
    },
  ],
}),
  },  
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract({
  use: [
    {
      loader: 'css-loader',
      options: {
        sourceMap: IS_DEVELOPMENT,
      }
    },
    {
      loader: 'sass-loader',
      options: {
        sourceMap: IS_DEVELOPMENT
      }
    },
    {
      loader: 'sass-resources-loader',
      options: {
        sourceMap: IS_DEVELOPMENT,
        resources: [
          './common/style/flaticon/_flaticon_class.scss',
          `./common/branding/${BRANDING}/${BRANDING}.scss`,
          './common/style/bootstrap/_general_variables.scss',
          './node_modules/bootstrap/scss/bootstrap-reboot.scss', // functions, variables, mixins, reboot
          './node_modules/bootstrap/scss/_root.scss',
          './node_modules/bootstrap/scss/_type.scss',
          './node_modules/bootstrap/scss/_images.scss',
          './node_modules/bootstrap/scss/_grid.scss',
          './node_modules/bootstrap/scss/_utilities.scss',
        ]
      },
    },
  ]
})

},

实际上,它工作正常,但是当我尝试将scss文件导入我的react组件并像css文件一样利用它时,类名是未定义的。

在我的组件文件中:

import styles from './ActivityGridItem.scss';
...
<div className={`m-2 ${styles.activityTypeIcon}`}></div>

通常,.activityTypeIcon样式应应用于我的div,但目前尚未定义。

我尝试像这样添加选项“ modules:true”:

test: /\.scss$/,
loader: ExtractTextPlugin.extract({
  use: [
    {
      loader: 'css-loader',
      options: {
        modules: true,
        sourceMap: IS_DEVELOPMENT,
      }
    },

但是,然后,每个sass文件都被识别为模块,并且我不能使用全局boostrap类,如row,col,m- *等。

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到

  • 您可以在css模块中使用global block来使引导程序类成为全局类。
  • 您可以创建2个加载器,一个加载器启用css-modules,另一个创建全局样式,并以某种方式区分它们。例如,您可以使所有以.module.scss结尾的文件都使用modules: true