astroturf icon indicating copy to clipboard operation
astroturf copied to clipboard

Astroturf causes errors when using persistent caching with Webpack 5

Open lostfictions opened this issue 3 years ago • 6 comments

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:

  • Clone the repo and yarn install
  • Run yarn start and open http://localhost:8080/ in your browser. Everything should work fine.
  • Webpack will have emitted persistent cache files to node_modules/.cache/webpack.
  • Close the watcher and open it again. You should get an error like this:
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 avatar Feb 27 '21 18:02 lostfictions

@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?

lostfictions avatar Feb 27 '21 18:02 lostfictions

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.

jquense avatar Mar 01 '21 13:03 jquense

I'm hitting this as well.

jsg2021 avatar Apr 26 '21 17:04 jsg2021

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

jquense avatar Apr 26 '21 17:04 jquense

@jquense so just add useAltLoader?

jsg2021 avatar Apr 26 '21 17:04 jsg2021

nice!

jsg2021 avatar Apr 26 '21 18:04 jsg2021