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 #18

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.

onigoetz commented 3 years ago

Hello @lahmatiy

I've looked into the 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 node because postcss can't.

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

onigoetz commented 3 years ago

Closing and replacing with #20 as I couldn't update this one