@@ -4,24 +4,24 @@ import type { WorkspaceProject } from 'vitest/node'
4
4
import type { BrowserServer } from './server'
5
5
import { lstatSync , readFileSync } from 'node:fs'
6
6
import { createRequire } from 'node:module'
7
- import { fileURLToPath } from 'node:url'
8
7
import { dynamicImportPlugin } from '@vitest/mocker/node'
9
8
import { toArray } from '@vitest/utils'
10
9
import MagicString from 'magic-string'
11
10
import { basename , dirname , extname , resolve } from 'pathe'
12
11
import sirv from 'sirv'
13
12
import { coverageConfigDefaults , type Plugin } from 'vitest/config'
14
13
import { getFilePoolName , resolveApiServerConfig , resolveFsAllow , distDir as vitestDist } from 'vitest/node'
14
+ import { distRoot } from './constants'
15
15
import BrowserContext from './plugins/pluginContext'
16
16
import { resolveOrchestrator } from './serverOrchestrator'
17
17
import { resolveTester } from './serverTester'
18
18
19
19
export { defineBrowserCommand } from './commands/utils'
20
20
export type { BrowserCommand } from 'vitest/node'
21
21
22
+ const versionRegexp = / (?: \? | & ) v = \w { 8 } /
23
+
22
24
export default ( browserServer : BrowserServer , base = '/' ) : Plugin [ ] => {
23
- const pkgRoot = resolve ( fileURLToPath ( import . meta. url ) , '../..' )
24
- const distRoot = resolve ( pkgRoot , 'dist' )
25
25
const project = browserServer . project
26
26
27
27
function isPackageExists ( pkg : string , root : string ) {
@@ -160,6 +160,24 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
160
160
res . end ( buffer )
161
161
} )
162
162
}
163
+ server . middlewares . use ( ( req , res , next ) => {
164
+ // 9000 mega head move
165
+ // Vite always caches optimized dependencies, but users might mock
166
+ // them in _some_ tests, while keeping original modules in others
167
+ // there is no way to configure that in Vite, so we patch it here
168
+ // to always ignore the cache-control set by Vite in the next middleware
169
+ if ( req . url && versionRegexp . test ( req . url ) && ! req . url . includes ( 'chunk-' ) ) {
170
+ res . setHeader ( 'Cache-Control' , 'no-cache' )
171
+ const setHeader = res . setHeader . bind ( res )
172
+ res . setHeader = function ( name , value ) {
173
+ if ( name === 'Cache-Control' ) {
174
+ return res
175
+ }
176
+ return setHeader ( name , value )
177
+ }
178
+ }
179
+ next ( )
180
+ } )
163
181
} ,
164
182
} ,
165
183
{
@@ -325,6 +343,12 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
325
343
BrowserContext ( browserServer ) ,
326
344
dynamicImportPlugin ( {
327
345
globalThisAccessor : '"__vitest_browser_runner__"' ,
346
+ filter ( id ) {
347
+ if ( id . includes ( distRoot ) ) {
348
+ return false
349
+ }
350
+ return true
351
+ } ,
328
352
} ) ,
329
353
{
330
354
name : 'vitest:browser:config' ,
0 commit comments