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.
@guylando PR welcome
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.
@jerryOnlyZRJ Read this: #40 (comment)