【问题标题】:Webpack 3 + Sass Loader : Cannot use scss as a moduleWebpack 3 + Sass Loader:不能将 scss 用作模块
【发布时间】:2018-12-08 17:40:35
【问题描述】:

我正在使用 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,但现在它是未定义的。

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

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

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

【问题讨论】:

    标签: reactjs webpack sass


    【解决方案1】:

    有几种方法可以做到这一点

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

    【讨论】:

      猜你喜欢
      • 2018-02-21
      • 2020-06-30
      • 2017-07-15
      • 2015-11-11
      • 2020-03-25
      • 2022-01-16
      • 2018-07-26
      • 2017-05-29
      • 2016-05-20
      相关资源
      最近更新 更多