【问题标题】:How to configure Webpack to not pull content of imported Sass files to a source map?如何配置 Webpack 不将导入的 Sass 文件的内容拉到源映射?
【发布时间】:2020-05-20 08:28:08
【问题描述】:

我有一个导入 Bootstrap 和 Font Awesome 的 Sass 文件。 它们已放在我的自定义 CSS 类之前的文件中。 代码如下:

/src/scss/site.scss

@import "~bootstrap/scss/bootstrap";
@import "~font-awesome/scss/font-awesome";

// Custom style sheet here
.my-custom-header{
    color:#F00
}

Webpack 构建后有一个源映射,但它包含 Bootstrap 的内容和字体真棒。

浏览器中的外观如下:

当我尝试检查自定义类时,它指向正确的原始源代码行号,但对于生成的源映射不正确,因为它在顶部有 Bootstrap 的内容。

我的问题是:

是否可以配置一个输出源映射,以保持导入语句和内容与实际源代码完全相同。

这是我所期望的源地图。 site.css.map

@import "~bootstrap/scss/bootstrap";
@import "~font-awesome/scss/font-awesome";

// Custom style sheet here
.my-custom-header{
    color:#F00
}

这是我的 Webpack 配置:

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

const siteFile = [__dirname, 'src', 'scss', 'site'];
const outputPath = [__dirname, 'public', 'css'];

module.exports = {
    entry: {
        site: path.resolve(...siteFile),
    },
    output: {
        path: path.resolve(...outputPath),
    },
    resolve: {
        // https://github.com/webpack/webpack-dev-server/issues/720#issuecomment-268470989
        extensions: ['.scss']
    },
    devtool: 'source-map',
    module: {
        rules: [
            {
                test: /\.scss$/,
                use: [
                    {
                        loader: MiniCssExtractPlugin.loader,
                    },
                    {
                        loader: 'css-loader', // Translates CSS into CommonJS modules
                        options: {
                            sourceMap: true
                        }
                    },
                    {
                        loader: 'postcss-loader', // Run post css actions
                        options: {
                            plugins: () => {
                                // post css plugins, can be exported to postcss.config.js
                                return [
                                    require('precss'),
                                    require('autoprefixer')
                                ];
                            },
                            sourceMap: true
                        }
                    },
                    {
                        loader: 'resolve-url-loader',
                    },
                    {
                        loader: 'sass-loader', // Compiles Sass to CSS, using node-sass by default
                        options: {
                            sourceMap: true
                        }
                    }
                ],
                exclude: /node_modules/
            },
            {
                test: /\.(png|jpe?g|gif|svg|eot|ttf|woff2?)$/,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: '[name].[ext]',
                            outputPath: '.' //relative to output
                        }
                    }
                ]
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: './[name].css' // relative to output
        }),
    ],
    devServer: {
        contentBase: path.join(__dirname, 'public'),
        compress: false,
        port: 8080,
    }
};

这里是示例代码存储库的链接。

codesanook-examples-webpack

谢谢。

【问题讨论】:

    标签: node.js webpack sass source-maps


    【解决方案1】:

    你试过 SourceMapDevToolPlugin 吗? https://webpack.js.org/plugins/source-map-dev-tool-plugin/

    您可能需要为节点模块的东西创建一个供应商捆绑包,然后您可以从源映射中忽略它。

    【讨论】:

    • 我以前发现过这个工具并尝试设置但我无法成功。我会再试一次,让你知道结果。谢谢。
    • 我已经设置了 SourceMapDevToolPlugin 但它无法解决我遇到的问题。从这条评论github.com/webpack-contrib/mini-css-extract-plugin/issues/… 告诉我们问题出在 Sass 文件顶部有 Bootstrap。我还通过排除 Bootstrap 并导入我的自定义 Sass 文件来验证,问题已经消失。但是,SourceMapDevToolPlugin 并不能解决问题,但我们可以将 Bootstrap 排除到其他文件或使用 CDN。仅供参考,导入我们的自定义 Sass 文件对源映射没有问题。再次感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 2020-06-30
    • 2018-12-01
    • 2015-11-05
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    相关资源
    最近更新 更多