egoist / rollup-plugin-postcss

Seamless integration between Rollup and PostCSS.
MIT License
676 stars 216 forks source link

Wrong resolution order for dynamically imported modules in 3.1.6 #316

Open rproserpio opened 4 years ago

rproserpio commented 4 years ago

Dynamically imported modules are sorted before any other entry since #295.

Let's assume an entry point main.js:

 import './styles.css'
 import('./dynamic.js').then(...)

and a dynamically imported module dynamic.js:

import './dynamic-styles.css`

Before #295 the css bundle had styles.css content before dynamic-styles.css content. Now the order is inverted.

The moduleIds array returned from getRecursiveImportOrder is missing the module ids found by using getModuleInfo(id).dynamicallyImportedIds. The previous definition based on this.moduleIds had them.

Dynamically imported modules should also have a stable order among themselves.

@wardpeet can I ask for your help?

wardpeet commented 4 years ago

Oh I didn't test it with dynamic ones. I'll create a fix for it. Sorry for the inconveniences

wardpeet commented 4 years ago

@rproserpio Dynamic imports are tricky cause we can't determine the sequence of when they are loaded. What would you suggest we do? I can append them at the end of each pass but I don't know the exact execution order.

rproserpio commented 4 years ago

@wardpeet I believe that picking one of the possible execution orders and keeping it deterministically between compilations is the sound and correct strategy, since if you import a module dynamically you must already account for every possible consistent interleaving. So, according to my understanding, your PR is the right solution to this problem. Thank you.