Skip to content

Cache continuously invalidated with dynamic inputs #2518

Description

@solonovamax

Describe the bug

given a vite.config.ts that looks roughly like this:

export default defineConfig(({command, mode}) => {
  // used by some vite plugin as a temporary directory
  const tempDir = `tmp/${mode === "production" ? "prod" : "dev"}`;

  return {
    run: {
      tasks: {
        build: {
          command: "vp build",
          cache: true,
          input: [
            {auto: true},
            `!${tempDir}/**`,
          ],
          output: [
            {auto: true},
            `!${tempDir}/**`,
          ],
        }
      }
    },
    // rest of vite config
  };
});

that is, when run in the production mode the input/output arrays are [{auto: true}, '!tmp/prod/**'], and when run in the development mode the input/output arrays are [{auto: true}, '!tmp/dev/**'].

if you run it the first time with --mode development, it will be a miss and will be properly added to the cache so subsequent runs with --mode development are cache hits.
however, if you then run it with --mode production, it will be a cache miss but it won't get properly added to the cache, so all subsequent calls with --mode production will also be cache misses.

you will get something along the lines of this:

$ pnpm vp run --verbose build --mode development
  $ vp build --mode development ○ cache miss: 'vite.config.ts' modified, executing
[...]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    Vite+ Task Runner • Execution Summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Statistics:   1 tasks • 0 cache hits • 1 cache misses
Performance:  0% cache hit rate

Task Details:
────────────────────────────────────────────────
  [1] [redacted]#build: $ vp build --mode development ✓
      → Cache miss: 'vite.config.ts' modified
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
$ pnpm vp run --verbose build --mode development
  $ vp build --mode development ◉ cache hit, replaying
[...]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    Vite+ Task Runner • Execution Summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Statistics:   1 tasks • 1 cache hits • 0 cache misses
Performance:  100% cache hit rate, 13.07s saved in total

Task Details:
────────────────────────────────────────────────
  [1] [redacted]#build: $ vp build --mode development ✓
      → Cache hit - output replayed - 13.07s saved
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
$ pnpm vp run --verbose build --mode production
  $ vp build ○ cache miss: input configuration changed, executing
[...]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    Vite+ Task Runner • Execution Summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Statistics:   1 tasks • 0 cache hits • 1 cache misses
Performance:  0% cache hit rate

Task Details:
────────────────────────────────────────────────
  [1] trxma-frontend#build: $ vp build --mode production ✓
      → Not cached: read and wrote 'tmp/prod/[...]'
$ pnpm vp run --verbose build --mode production
  $ vp build ○ cache miss: input configuration changed, executing
[...]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    Vite+ Task Runner • Execution Summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Statistics:   1 tasks • 0 cache hits • 1 cache misses
Performance:  0% cache hit rate

Task Details:
────────────────────────────────────────────────
  [1] trxma-frontend#build: $ vp build --mode production ✓
      → Not cached: read and wrote 'tmp/prod/[...]'

(I am prefixing shell commands I ran with $, so to distinguish it from when $ was printed to the console, I added two spaces in front of it)


I have not provided a reproduction sample at the moment (I am aware that I checked the box at the bottom), I just want to report this before I forget. I'm going to make a reproduction sample later.

Reproduction

See above

Steps to reproduce

Will be provided when I make a reproduction sample

System Info

`vp env current`: cannot run, see: https://github.com/voidzero-dev/vite-plus/issues/2515

$ pnpm vp --version
VITE+ - The Unified Toolchain for the Web

vp v0.2.9

Local vite-plus:
  vite-plus  v0.2.9

Tools:
  vite             v8.2.1
  rolldown         v1.2.3
  vitest           v4.1.10
  oxfmt            v0.62.0
  oxlint           v1.77.0
  oxlint-tsgolint  v7.0.2001
  tsdown           v0.22.14

Used Package Manager

pnpm

Logs

Validations

Metadata

Metadata

Assignees

Type

Fields

Priority

None yet

Effort

None yet

Target date

None yet

Start date

None yet

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions