voidzero-dev / voidzero-dev/vite-plus

Cache continuously invalidated with dynamic inputs

Open
#2,518 0 comments 0 reactions 1 assignee Claimed by @wan9chi View on GitHub
pending triage
Dominant language
Rust
Stars
5.8k
Forks
261
Avg merge
1d 34m
Merged PRs (30d)
135

Description

### Describe the bug

given a `vite.config.ts` that looks roughly like this:
```ts
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:
```shell
$ 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

```shell
`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

```shell

```

### Validations

- [x] Read the [Contributing Guidelines](https://github.com/voidzero-dev/vite-plus/blob/main/CONTRIBUTING.md).
- [x] Check that there isn't [already an issue](https://github.com/voidzero-dev/vite-plus/issues) for the same bug.
- [x] Confirm this is a Vite+ issue and not an upstream issue (Vite, Vitest, tsdown, Rolldown, or Oxc).
- [x] The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.