【问题标题】:Error when combining sass-loader with css-modules将 sass-loader 与 css-modules 结合使用时出错
【发布时间】:2017-02-18 17:52:24
【问题描述】:

使用 SASS 的 map-get 时出现以下错误。

ERROR in ./src/special.scss
Module build failed: ModuleBuildError: Module build failed: Unknown word (11:14)

   9 |
  10 | @mixin mediaquery($name) {
> 11 |     @media #{map-get($breakpoints, $name)} {
     |              ^
  12 |         @content;
  13 |     }
  14 | }

只有当我同时使用 sass-loader 和另一个加载器时才会发生这种情况。

first thought 这是由 PostCSS 加载程序引起的,但似乎是 sass 加载导致问题,而不是在使用 css-modules 时转换 scss。

我创建了一个示例代码库来说明问题:https://github.com/tiemevanveen/sass-css-components-fail-example

可以使用不同的分支进行测试:

只有第一个和最后一个分支运行没有错误。

我创建了日志源示例以查看 sass-loader 返回的内容和it looks like it's not transforming the sass(但这也可能是我误解了加载程序的工作方式)。

另一个没有 css 模块的例子是 show the right transformed 代码..

我很困惑为什么 master 分支(没有 postcss 或其他自定义加载器)工作正常。如果 sass-loader 出现问题,那么它也应该失败,对吧?

我已经提交了an issue,但我认为这在 StackOverflow 上更有机会,因为它是一个非常具体的问题,可能更多的是配置问题。这是我的 webpack 配置:

const webpack = require('webpack');
const path = require('path');
const autoprefixer = require('autoprefixer');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const WriteFilePlugin = require('write-file-webpack-plugin');

module.exports = {
  devtool: 'source-source-map',
  debug: true,
  context: path.resolve(__dirname, './src'),
  entry: {
    app: './index.js'
  },
  output: {
    path: path.resolve(__dirname, './static'),
    filename: '[name].js',
    publicPath: '/static/'
  },
  devServer: {
    outputPath: path.resolve(__dirname, './static'),
  },
  plugins: [
    new webpack.NoErrorsPlugin(),
    new ExtractTextPlugin('[name].css'),
    new WriteFilePlugin()
  ],
  module: {
    loaders: [
      {
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract('style-loader', [
          'css?modules&importLoaders=1&localIdentName=[path]_[name]_[local]',
          // 'postcss-loader',
          'sass'
        ])
      },
      // + js loader
    ]
  },
  postcss: [
    autoprefixer({ browsers: ['> 0.5%'] })
  ],
  resolveLoader: {
    fallback: [
      path.resolve(__dirname, 'loaders'),
      path.join(process.cwd(), 'node_modules')
    ]
  },
  resolve: {
    extensions: ['', '.js', '.json'],
  }
};

【问题讨论】:

    标签: sass webpack css-modules


    【解决方案1】:

    您需要在添加加载程序时增加importLoaders 查询参数。该功能的文档记录不充分且令人困惑,但在您的示例存储库中,importLoaders=2 与 Sass 和 PostCSS 一起工作。

    【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2019-08-31
    • 2018-06-09
    • 2017-10-10
    • 2017-02-16
    • 2018-04-04
    • 2013-11-07
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多