@@ -122,17 +122,44 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
122122 define [ `import.meta.env.${ env } ` ] = stringValue
123123 }
124124
125+ const entries : string [ ] = [
126+ ...browserTestFiles ,
127+ ...setupFiles ,
128+ resolve ( vitestDist , 'index.js' ) ,
129+ resolve ( vitestDist , 'browser.js' ) ,
130+ resolve ( vitestDist , 'runners.js' ) ,
131+ resolve ( vitestDist , 'utils.js' ) ,
132+ ...( project . config . snapshotSerializers || [ ] ) ,
133+ ]
134+
135+ if ( project . config . diff ) {
136+ entries . push ( project . config . diff )
137+ }
138+
139+ if ( project . ctx . coverageProvider ) {
140+ const coverage = project . ctx . config . coverage
141+ const provider = coverage . provider
142+ if ( provider === 'v8' ) {
143+ const path = tryResolve ( '@vitest/coverage-v8' , [ project . ctx . config . root ] )
144+ if ( path ) {
145+ entries . push ( path )
146+ }
147+ }
148+ else if ( provider === 'istanbul' ) {
149+ const path = tryResolve ( '@vitest/coverage-istanbul' , [ project . ctx . config . root ] )
150+ if ( path ) {
151+ entries . push ( path )
152+ }
153+ }
154+ else if ( provider === 'custom' && coverage . customProviderModule ) {
155+ entries . push ( coverage . customProviderModule )
156+ }
157+ }
158+
125159 return {
126160 define,
127161 optimizeDeps : {
128- entries : [
129- ...browserTestFiles ,
130- ...setupFiles ,
131- resolve ( vitestDist , 'index.js' ) ,
132- resolve ( vitestDist , 'browser.js' ) ,
133- resolve ( vitestDist , 'runners.js' ) ,
134- resolve ( vitestDist , 'utils.js' ) ,
135- ] ,
162+ entries,
136163 exclude : [
137164 'vitest' ,
138165 'vitest/utils' ,
@@ -163,6 +190,7 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
163190 'vitest > chai > loupe' ,
164191 'vitest > @vitest/runner > p-limit' ,
165192 'vitest > @vitest/utils > diff-sequences' ,
193+ 'vitest > @vitest/utils > loupe' ,
166194 '@vitest/browser > @testing-library/user-event' ,
167195 '@vitest/browser > @testing-library/dom' ,
168196 ] ,
@@ -235,10 +263,9 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
235263 enforce : 'post' ,
236264 async config ( viteConfig ) {
237265 // Enables using ignore hint for coverage providers with @preserve keyword
238- if ( viteConfig . esbuild !== false ) {
239- viteConfig . esbuild ||= { }
240- viteConfig . esbuild . legalComments = 'inline'
241- }
266+ viteConfig . esbuild ||= { }
267+ viteConfig . esbuild . legalComments = 'inline'
268+
242269 const server = resolveApiServerConfig (
243270 viteConfig . test ?. browser || { } ,
244271 defaultBrowserPort ,
@@ -294,8 +321,8 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
294321 {
295322 name : 'test-utils-rewrite' ,
296323 setup ( build ) {
297- const _require = createRequire ( import . meta. url )
298324 build . onResolve ( { filter : / @ v u e \/ t e s t - u t i l s / } , ( args ) => {
325+ const _require = getRequire ( )
299326 // resolve to CJS instead of the browser because the browser version expects a global Vue object
300327 const resolved = _require . resolve ( args . path , {
301328 paths : [ args . importer ] ,
@@ -313,6 +340,24 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
313340 ]
314341}
315342
343+ function tryResolve ( path : string , paths : string [ ] ) {
344+ try {
345+ const _require = getRequire ( )
346+ return _require . resolve ( path , { paths } )
347+ }
348+ catch {
349+ return undefined
350+ }
351+ }
352+
353+ let _require : NodeRequire
354+ function getRequire ( ) {
355+ if ( ! _require ) {
356+ _require = createRequire ( import . meta. url )
357+ }
358+ return _require
359+ }
360+
316361function resolveCoverageFolder ( project : WorkspaceProject ) {
317362 const options = project . ctx . config
318363 const htmlReporter = options . coverage ?. enabled
0 commit comments