Vitest coverage issue `vite:import-analysis` error `Pre-transform error: Failed to resolve import "#/util" from "src/app/app.ts". Does the file exist?`
- Lingua principale
- TypeScript
- Stelle
- 27k
- Fork
- 11.8k
- Merge medio
- 14h 23m
- PR unite (30g)
- 162
Descrizione
### Command
test
### Is this a regression?
- [x] Yes, this behavior used to work in the previous version
### The previous version in which this bug was not present was
vitest@4.0.8
### Description
I'm not sure if this issue is an issue with Vitest, or the Angular CLI integration with Vitest. I put the issue here, because I have no idea how to reproduce this issue without Angular at the moment.
The issue is that when using `tsconfig.json` property `paths` and running browser tests with coverage, these `paths` will not used when Vitest tries to read coverage from source maps. The requirement seems to be that a shared chunk exists (`import './app'` in the repro steps).
This results in errors during coverage generation, but tests do not crash. The errors come from Vite's dev server pre transforming original `.ts` files referenced in source-maps.
**Requirements**
- Using `paths` in `tsconfig.json`
- Angular CLI + `eslint` creates a shared chunk that has the `paths` in it's sourcemap
- Vitest with `browsers` + `coverage` + `coverageInclude`
- Vitest `v4.1.0+`
### Minimal Reproduction
1. Init Angular project & install vitest coverage & browser packages
```
npx @angular/cli@21.1.5 new ng21.1.5 -s -t --style css --no-ssr --ai-config none
npm i -E -D vitest@4.1.0 @vitest/browser-playwright@4.1.0 @vitest/coverage-v8@4.1.0 playwright
```
2. Add `src/app/util.ts` file
```ts
export const greet = 'Hello';
```
3. Add a path alias to util file
```json
{
"compilerOptions": {
"paths": {
"#/util": ["./src/app/util.ts"]
}
}
}
```
4. Make `App` (`app.ts`) use value from `util.ts`
```ts
import { greet } from '#/util';
// ...
export class App {
protected readonly title = signal(greet);
}
```
5. Add import to `app.ts` from `app.config.ts`
```ts
import './app';
```
6. Run tests with browser, coverage & coverage include
```
npx ng test --no-watch --browsers chromium --coverage --coverage-include src/app/**/*.ts
```
### Exception or Error
```text
There's logged errors for every file that uses the path alias, which in our project is most of them (e.g. `import { shared } from '#/core';`).
00:02:12 [vite] (client) Pre-transform error: Failed to resolve import "#/util" from "src/app/app.ts". Does the file exist?
Plugin: vite:import-analysis
File: C:/Users/foo/repro/src/app/app.ts:3:22
11 | import { Component, signal } from "@angular/core";
12 | import { RouterOutlet } from "@angular/router";
13 | import { greet } from "#/util";
| ^
14 | export let App = class {
15 | title = signal(greet);
```
### Your Environment
```text
I've tried with `@angular/build` + `@angular/cli` at several versions, including `21.1.x` and `21.2.x`. Downgrading `vitest` to `4.0.8` fixes the issue, but `vitest@4.1.0` and `4.1.2` both failed.
----------------------------------------
Angular CLI : 21.2.5
Angular : 21.2.6
Node.js : 25.8.2 (Unsupported)
Package Manager : npm 11.11.1
Operating System : win32 x64
┌───────────────────────────┬───────────────────┬───────────────────┐
│ Package │ Installed Version │ Requested Version │
├───────────────────────────┼───────────────────┼───────────────────┤
│ @angular/build │ 21.2.5 │ ^21.1.5 │
│ @angular/cli │ 21.2.5 │ ^21.1.5 │
│ @angular/common │ 21.2.6 │ ^21.1.0 │
│ @angular/compiler │ 21.2.6 │ ^21.1.0 │
│ @angular/compiler-cli │ 21.2.6 │ ^21.1.0 │
│ @angular/core │ 21.2.6 │ ^21.1.0 │
│ @angular/forms │ 21.2.6 │ ^21.1.0 │
│ @angular/platform-browser │ 21.2.6 │ ^21.1.0 │
│ @angular/router │ 21.2.6 │ ^21.1.0 │
│ rxjs │ 7.8.2 │ ~7.8.0 │
│ typescript │ 5.9.3 │ ~5.9.2 │
│ vitest │ 4.1.0 │ 4.1.0 │
└───────────────────────────┴───────────────────┴───────────────────┘
```
### Anything else relevant?
Does not seem to be OS specific. The issue is on GitHub Actions on Ubuntu, and locally on Windows.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia riproducendo il malfunzionamento con il progetto Angular elencato, l’alias di percorso di tsconfig.json, l’import di src/app/app.ts e il comando ng test, confrontando Vitest 4.1.0 con 4.0.8. Traccia la generazione della coverage e la gestione delle source map quando il chunk condiviso dell’app fa riferimento all’alias. Il lavoro è completato quando la coverage del browser termina senza errori vite:import-analysis mentre l’alias viene risolto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- playwright, typescript
- Ambito
- testing-qa
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 48/100