源映射在 mini-css-extract-plugin 中

Nem*_*o64 8 webpack webpack-dev-server hot-module-replacement mini-css-extract-plugin

我似乎无法让源映射与mini-css-extract-plugin. 我让他们与style-loader.

devtool: argv.mode === 'development' ? 'eval' : 'none',

[...]

test: /\.scss$|\.css$/i,
use: [
     {
          loader: MiniCssExtractPlugin.loader,
          options: {sourceMap: argv.mode === 'development', hmr: argv.hot},
     },
     {
         loader: 'css-loader',
         options: {sourceMap: argv.mode === 'development', importLoaders: 1},
     },

[...]

plugins: [
    [...]
    new MiniCssExtractPlugin({
        filename: argv.mode === 'development' ? '[name].css' : '[contenthash].css',
        chunkFilename: argv.mode === 'development' ? '[id].css' : '[contenthash].css',
    }),
]
Run Code Online (Sandbox Code Playgroud)

一些前沿信息:我一直使用style-loader来获取热模块替换以在开发模式和mini-css-extract-plugin生产模式下工作。

现在mini-css-extract-plugin支持 hmr,这很棒,因为我不再需要在开发中处理 FOUC。

但是没有源映射至少告诉我样式来自哪个文件很烦人。

Nem*_*o64 6

在写问题时,我找到了一个可能的解决方案,最终确实有效。

我定义了devtool哪个eval是最便宜的选择。我不完全明白它是如何工作的,但它不是真正的源映射,而是它将整个源代码包装在 eval 语句中,并告诉浏览器这是一个特定的文件,这对我来说很好,但这种策略显然不能处理 css 文件。

我所做的是将 devtool 定义为cheap-source-map这似乎是不依赖 eval 语句的最快选项。

我还认为我完全误解了加载器的 sourceMap 选项。我只在生成显示原始源代码的完整源映射时才需要它们。(虽然我还没有完全测试过)