5

I'm trying to enable sourceMaps in webpack but there seems to be a problem with sass-loader and postcss-loader combination.

With both sass-loader and postcss-loader enabled my console shows "no source":

nosource

But when I disable postcss-loader the sourceMap works fine and points to "typography" file:

typography

webpack.config.js

const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        publicPath: '/dist',
        filename: 'js/bundle.js',
    },
    devtool: 'inline-source-map',
    module: {
        rules: [{
                test: /\.css$/i,
                use: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: ['css-loader', 'postcss-loader']
                })
            },
            {
                test: /\.scss$/i,
                use: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: [{
                            loader: 'css-loader',
                            options: {
                                sourceMap: true
                            }
                        },
                        {
                            loader: 'postcss-loader',
                            options: {
                                sourceMap: true
                            }
                        },
                        {
                            loader: 'sass-loader',
                            options: {
                                sourceMap: true
                            }
                        }
                    ]
                })
            },
            {
                test: /\.js$/i,
                exclude: /node_modules/,
                loader: 'babel-loader'
            }
        ]
    },
    plugins: [
        new ExtractTextPlugin('css/style.css')
    ]
};

main.scss

@import 'typography';

typography.scss

p {
    font-size: responsive 12px 18px;
}
1
  • For anyone trying the provided solution, yet still not seeing the original SASS sources in Chrome DevTools: make sure that the following configuration is active: under DevTools' Settings > Preferences > activate Enable CSS source maps. Commented Jul 5, 2023 at 9:39

1 Answer 1

9

You can give the following a try. This is what I'm using and it's working.

{
    test: /\.(sa|sc|c)ss$/,
    exclude: ['/node_modules', './dist', '/src/js', '/docs'],
    use: [
        MiniCSSExtractPlugin.loader,
        {
            loader: 'css-loader',
            options: {
                sourceMap: true,
                minimize: process.env.NODE_ENV === 'production',
            }
        },
        {
            loader: 'postcss-loader',
            options: {
                sourceMap: true,
                syntax: postCssScss,
                plugins: () => [
                    autoprefixer,
                    postCssPresetEnv({
                        stage: 0,
                        features: {
                            'color-mod-function': true,
                            'alpha-hex-colors': true
                        }
                    }),
                ],
            },
        },
        {
            loader: 'sass-loader',
            options: {
                sourceMap: true
            }
        }
    ]
}

The extractTextPlugin has been deprecated for Webpack4 in favor of miniCssExtractPlugin

Sign up to request clarification or add additional context in comments.

3 Comments

You are right my comment contains an error. But you do use minimize in your code.
I know.. that's why I commented here :) But I'll delete my comment as it can indeed be confusing.
If the css-loader has changed feel free to update the answer so it doesn't return an error

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.