lahmatiy / postcss-csso

PostCSS plugin to minify CSS using CSSO
MIT License
119 stars 6 forks source link

Replace `Once` with `OnceExit` to do the compression last #20

Closed onigoetz closed 3 years ago

onigoetz commented 3 years ago

Hi,

With the recent update of postcss-nested to use RuleExit (https://github.com/postcss/postcss-nested/blob/main/index.js#L135) it seems that Once that postcss-csso is fired too early.

Making postcss-csso run before other postcss plugins finish converting the CSS file and thus can't parse the currently generated CSS.

Using OnceExit instead of Once moves this processing when everything else is finished.

I changed a test as there was a test failure

1) edge cases should process partial inited nodes: TypeError: Cannot read property 'toLowerCase' of undefined at getEvents (node_modules/postcss/lib/lazy-result.js:29:21) at toStack (node_modules/postcss/lib/lazy-result.js:56:14)

The line of the error is : https://github.com/postcss/postcss/blob/main/lib/lazy-result.js#L52

Which means that there is no way for postcss-csso to handle a partially inited declaration node because postcss can't.

This is why I changed the test to only test for an unfinished @ rule since that actually works.

lahmatiy commented 3 years ago

I added a test for postcss-nested and revert changes in "should process partial inited nodes" test with a fix of it. Looks like PR solves the issue #19. @onigoetz Thank you very much for the fix and clarifications 🙏