-
-
Notifications
You must be signed in to change notification settings - Fork 388
Description
Hi,
I am using this plugin in combination with CSS modules, and postcss with postcss-autoreset, With the recommended loader chain, autoreset is applied to each imported CSS module, rather than once at the end. When combined with composes, this means that the autoreset rules can be applied out of order.
Stripped-down example of my issue:
/* foo.css */
.foo { color: red; }/* bar.css */
.bar {
composes: foo from './foo.css';
background: yellow;
}// webpack config excerpt:
{ test: /[.]css$/,
use: [
MiniCssExtractPlugin.loader,
{ loader: 'css-loader', options: { modules: true, importLoaders: 1 } },
{ loader: 'postcss-loader' },
] },// postcss.config.js
plugins: [
require('postcss-autoreset')({
reset: {
background: 'inherit',
color: 'inherit',
},
}),
],/* output css */
.foo { background: inherit; color: inherit; }
.foo, .bar { color: red; }
.bar { background: inherit; color: inherit; }
.bar { background: yellow; }The color: inherit for .bar comes after the color: red, so unfortunately overrides it, and the color will not be red. I was able to solve this by running postcss on the combined, extracted CSS, rather than individually on each input. Unfortunately I had to break out of webpack to do it:
- "build": "webpack --config webpack.config.js",
+ "build": "webpack --config webpack.config.js && yarn harden-css",
+ "harden-css": "postcss lib/index.css -o lib/index.css",And the output is now correct (and more efficient as well!)
.foo, .bar { background: inherit; color: inherit; }
.foo, .bar { color: red; }
.bar { background: yellow; }Is running a post-extraction transform something that is in scope for this plugin? Is there an existing way to do this as part of the loader chain that I missed?