@@ -4,24 +4,24 @@ import type { WorkspaceProject } from 'vitest/node'
44import type { BrowserServer } from './server'
55import { lstatSync , readFileSync } from 'node:fs'
66import { createRequire } from 'node:module'
7- import { fileURLToPath } from 'node:url'
87import { dynamicImportPlugin } from '@vitest/mocker/node'
98import { toArray } from '@vitest/utils'
109import MagicString from 'magic-string'
1110import { basename , dirname , extname , resolve } from 'pathe'
1211import sirv from 'sirv'
1312import { coverageConfigDefaults , type Plugin } from 'vitest/config'
1413import { getFilePoolName , resolveApiServerConfig , resolveFsAllow , distDir as vitestDist } from 'vitest/node'
14+ import { distRoot } from './constants'
1515import BrowserContext from './plugins/pluginContext'
1616import { resolveOrchestrator } from './serverOrchestrator'
1717import { resolveTester } from './serverTester'
1818
1919export { defineBrowserCommand } from './commands/utils'
2020export type { BrowserCommand } from 'vitest/node'
2121
22+ const versionRegexp = / (?: \? | & ) v = \w { 8 } /
23+
2224export default ( browserServer : BrowserServer , base = '/' ) : Plugin [ ] => {
23- const pkgRoot = resolve ( fileURLToPath ( import . meta. url ) , '../..' )
24- const distRoot = resolve ( pkgRoot , 'dist' )
2525 const project = browserServer . project
2626
2727 function isPackageExists ( pkg : string , root : string ) {
@@ -160,6 +160,24 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
160160 res . end ( buffer )
161161 } )
162162 }
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+ } )
163181 } ,
164182 } ,
165183 {
@@ -325,6 +343,12 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
325343 BrowserContext ( browserServer ) ,
326344 dynamicImportPlugin ( {
327345 globalThisAccessor : '"__vitest_browser_runner__"' ,
346+ filter ( id ) {
347+ if ( id . includes ( distRoot ) ) {
348+ return false
349+ }
350+ return true
351+ } ,
328352 } ) ,
329353 {
330354 name : 'vitest:browser:config' ,
0 commit comments