Skip to content

Commit c79b3f1

Browse files
authored
fix(browser): specify entries for correct deps optimization (#5839)
1 parent 23d580a commit c79b3f1

File tree

4 files changed

+43
-28
lines changed

4 files changed

+43
-28
lines changed

packages/browser/src/node/index.ts

+16-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import sirv from 'sirv'
66
import type { ViteDevServer } from 'vite'
77
import type { ResolvedConfig } from 'vitest'
88
import type { BrowserScript, WorkspaceProject } from 'vitest/node'
9+
import { getFilePoolName, distDir as vitestDist } from 'vitest/node'
910
import { type Plugin, coverageConfigDefaults } from 'vitest/config'
10-
import { slash } from '@vitest/utils'
11+
import { slash, toArray } from '@vitest/utils'
1112
import BrowserContext from './plugins/pluginContext'
1213
import BrowserMocker from './plugins/pluginMocker'
1314
import DynamicImport from './plugins/pluginDynamicImport'
@@ -155,8 +156,22 @@ export default (project: WorkspaceProject, base = '/'): Plugin[] => {
155156
name: 'vitest:browser:tests',
156157
enforce: 'pre',
157158
async config() {
159+
const allTestFiles = await project.globTestFiles()
160+
const browserTestFiles = allTestFiles.filter(file => getFilePoolName(project, file) === 'browser')
161+
const setupFiles = toArray(project.config.setupFiles)
162+
const vitestPaths = [
163+
resolve(vitestDist, 'index.js'),
164+
resolve(vitestDist, 'browser.js'),
165+
resolve(vitestDist, 'runners.js'),
166+
resolve(vitestDist, 'utils.js'),
167+
]
158168
return {
159169
optimizeDeps: {
170+
entries: [
171+
...browserTestFiles,
172+
...setupFiles,
173+
...vitestPaths,
174+
],
160175
exclude: [
161176
'vitest',
162177
'vitest/utils',

packages/vitest/src/integrations/browser/server.ts

+1-4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export async function createBrowserServer(project: WorkspaceProject, configFile:
2424
server: {
2525
hmr: false,
2626
watch: null,
27+
preTransformRequests: false,
2728
},
2829
plugins: [
2930
...project.options?.plugins || [],
@@ -58,10 +59,6 @@ export async function createBrowserServer(project: WorkspaceProject, configFile:
5859
resolve: {
5960
alias: config.test?.alias,
6061
},
61-
server: {
62-
watch: null,
63-
preTransformRequests: false,
64-
},
6562
}
6663
},
6764
},

packages/vitest/src/node/index.ts

+3
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@ export { registerConsoleShortcuts } from './stdin'
88
export type { GlobalSetupContext } from './globalSetup'
99
export type { WorkspaceSpec, ProcessPool } from './pool'
1010
export { createMethodsRPC } from './pools/rpc'
11+
export { getFilePoolName } from './pool'
1112
export { VitestPackageInstaller } from './packageInstaller'
1213

14+
export { distDir, rootDir } from '../paths'
15+
1316
export type { TestSequencer, TestSequencerConstructor } from './sequencers/types'
1417
export { BaseSequencer } from './sequencers/BaseSequencer'
1518

packages/vitest/src/node/pool.ts

+23-23
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,28 @@ export interface PoolProcessOptions {
2727

2828
export const builtinPools: BuiltinPool[] = ['forks', 'threads', 'browser', 'vmThreads', 'vmForks', 'typescript']
2929

30+
function getDefaultPoolName(project: WorkspaceProject, file: string): Pool {
31+
if (project.config.typecheck.enabled) {
32+
for (const glob of project.config.typecheck.include) {
33+
if (mm.isMatch(file, glob, { cwd: project.config.root }))
34+
return 'typescript'
35+
}
36+
}
37+
if (project.config.browser.enabled)
38+
return 'browser'
39+
return project.config.pool
40+
}
41+
42+
export function getFilePoolName(project: WorkspaceProject, file: string) {
43+
for (const [glob, pool] of project.config.poolMatchGlobs) {
44+
if ((pool as Pool) === 'browser')
45+
throw new Error('Since Vitest 0.31.0 "browser" pool is not supported in "poolMatchGlobs". You can create a workspace to run some of your tests in browser in parallel. Read more: https://vitest.dev/guide/workspace')
46+
if (mm.isMatch(file, glob, { cwd: project.config.root }))
47+
return pool as Pool
48+
}
49+
return getDefaultPoolName(project, file)
50+
}
51+
3052
export function createPool(ctx: Vitest): ProcessPool {
3153
const pools: Record<Pool, ProcessPool | null> = {
3254
forks: null,
@@ -37,28 +59,6 @@ export function createPool(ctx: Vitest): ProcessPool {
3759
typescript: null,
3860
}
3961

40-
function getDefaultPoolName(project: WorkspaceProject, file: string): Pool {
41-
if (project.config.typecheck.enabled) {
42-
for (const glob of project.config.typecheck.include) {
43-
if (mm.isMatch(file, glob, { cwd: project.config.root }))
44-
return 'typescript'
45-
}
46-
}
47-
if (project.config.browser.enabled)
48-
return 'browser'
49-
return project.config.pool
50-
}
51-
52-
function getPoolName([project, file]: WorkspaceSpec) {
53-
for (const [glob, pool] of project.config.poolMatchGlobs) {
54-
if ((pool as Pool) === 'browser')
55-
throw new Error('Since Vitest 0.31.0 "browser" pool is not supported in "poolMatchGlobs". You can create a workspace to run some of your tests in browser in parallel. Read more: https://vitest.dev/guide/workspace')
56-
if (mm.isMatch(file, glob, { cwd: project.config.root }))
57-
return pool as Pool
58-
}
59-
return getDefaultPoolName(project, file)
60-
}
61-
6262
// in addition to resolve.conditions Vite also adds production/development,
6363
// see: https://github.com/vitejs/vite/blob/af2aa09575229462635b7cbb6d248ca853057ba2/packages/vite/src/node/plugins/resolve.ts#L1056-L1080
6464
const potentialConditions = new Set(['production', 'development', ...ctx.server.config.resolve.conditions])
@@ -137,7 +137,7 @@ export function createPool(ctx: Vitest): ProcessPool {
137137
}
138138

139139
for (const spec of files) {
140-
const pool = getPoolName(spec)
140+
const pool = getFilePoolName(spec[0], spec[1])
141141
filesByPool[pool] ??= []
142142
filesByPool[pool].push(spec)
143143
}

0 commit comments

Comments
 (0)