webpack-contrib/cache-loader

Doesn't work with mini-css-extract

guylando opened this issue · 12 comments

If cache-loader cached files in the .cache-loader folder then on following builds mini-css-extract does not extract css files.

@guylando What? How it is related to extract? Please provide reproducible test repo

@evilebottnawi Here is the code to reproduce with steps to reproduce in the readme
https://github.com/guylando/WebpackCacheExtractCssBug

@guylando you use invalid configuration, cache-loader should be before fast-css-loader

@evilebottnawi I dont understand. The cache-loader appears before fast-css-loader in the array.
Can you please give example of the required fix?

@evilebottnawi Also would be helpful if you know where can I read the documentation about this (couldn't find information about this in google..)

Fixed by changing order between cache-loader and mini-css-extract loader but it kind of ruins the point of caching because mini-css-extract will exctract css each time even if cache is used.

So I still believe cache-loader and mini-css-extract dont work as desired when together.

@guylando cache-loader caching modules, extract css is not create modules and can't works by design

@evilebottnawi mini-css-extract could add caching ability as following: when receiving a module from previous loader, either cache-loader or css loader, then to hash the result in a way that can be compared for future builds. Similar to how other plugins implemented caching. Unless mini-css-extract actions are neglible time-wise, this will create a major performance improvement for mini-css-extract usage.

There is a hack for this issue:

You can put your cache-loader behind your mini-css-extract-plugin, like this:

{
    ...,
    {
        test: /\.(less|css)$/,
        use: [
          _mode === 'development' ? 'style-loader' : MiniCssExtractPlugin.loader,
          'cache-loader',
          {
            loader: 'css-loader',
            options: {
               importLoaders: 1,
               import: true,
             },
          },
          'postcss-loader',
        ],
      },
}

It seems to work well.