astroturfcss / astroturf

Better Styling through Compiling: CSS-in-JS for those that want it all.
https://astroturfcss.github.io/astroturf/
MIT License
2.28k stars 60 forks source link

Astroturf causes errors when using persistent caching with Webpack 5 #681

Open lostfictions opened 3 years ago

lostfictions commented 3 years ago

As discussed in #667.

Astroturf will cause errors when using Webpack 5's persistent cache. It wouldn't bother me too much if persistent caching simply didn't work for Astroturf, but as it stands these errors block the use of persistent caching entirely and require the user to turn it off. I thought I'd file a separate issue for this since #667 seems to concern persistent cache support for Astroturf, whereas this is about a blocking error.

Here's a minimal repro: https://github.com/lostfictions/repro-astroturf1-webpack5

To reproduce:

ERROR in ./src/index.js 2:0-52
Module not found: Error: Can't resolve './index-whatever.module.css' in 'repro-astroturf1-webpack5/src'
resolve './index-whatever.module.css' in 'repro-astroturf1-webpack5/src'
  using description file: repro-astroturf1-webpack5/package.json (relative path: ./src)
    Field 'browser' doesn't contain a valid alias configuration
    using description file: repro-astroturf1-webpack5/package.json (relative path: ./src/index-whatever.module.css)
      no extension
        Field 'browser' doesn't contain a valid alias configuration
        repro-astroturf1-webpack5/src/index-whatever.module.css doesn't exist
      .js
        Field 'browser' doesn't contain a valid alias configuration
        repro-astroturf1-webpack5/src/index-whatever.module.css.js doesn't exist
      .json
        Field 'browser' doesn't contain a valid alias configuration
        repro-astroturf1-webpack5/src/index-whatever.module.css.json doesn't exist
      .wasm
        Field 'browser' doesn't contain a valid alias configuration
        repro-astroturf1-webpack5/src/index-whatever.module.css.wasm doesn't exist
      as directory
        repro-astroturf1-webpack5/src/index-whatever.module.css doesn't exist

webpack 5.24.2 compiled with 1 error in 191 ms
ℹ 「wdm」: Failed to compile.

Looks like it's trying to find materialized versions of the virtual modules, presumably to check whether they've changed and the cache needs to be invalidated. I'd hazard a guess this could be fixed by telling the cache manifest to check the original source files (ie. index.js in this case) instead.

lostfictions commented 3 years ago

@jquense Ahh, just found your long-running issue in https://github.com/webpack/webpack/issues/11074 ... Looks like a few other pieces of tooling have had success moving away from virtual modules (https://github.com/marko-js/webpack/pull/48, https://github.com/sveltejs/svelte-loader/pull/151) in the past month or so, maybe there's a more obvious way forward now?

jquense commented 3 years ago

hmm i'm now very confused as to why our app doesn't exhibit this problem, thanks for the repro repo. I've considered the other approach in that issue but there are a lot of downsides to it that seem untenable but i need to try and spike it out again to see.

jsg2021 commented 3 years ago

I'm hitting this as well.

jquense commented 3 years ago

@jsg2021 https://github.com/4Catalyzer/astroturf/issues/667

jsg2021 commented 3 years ago

@jquense so just add useAltLoader?

jsg2021 commented 3 years ago

nice!