Skip to content

Commit 19d64e2

Browse files
authoredOct 11, 2024··
fix(vitest): always inline setup files (#6689)
1 parent 47dde76 commit 19d64e2

File tree

10 files changed

+70
-21
lines changed

10 files changed

+70
-21
lines changed
 

‎packages/vite-node/src/cli.ts

+1
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ function parseServerOptions(
182182
...serverOptions,
183183
deps: {
184184
...serverOptions.deps,
185+
inlineFiles: toArray(serverOptions.deps?.inlineFiles),
185186
inline:
186187
inlineOptions !== true
187188
? inlineOptions.map((dep) => {

‎packages/vite-node/src/externalize.ts

+3
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,9 @@ async function _shouldExternalize(
119119
if (matchExternalizePattern(id, moduleDirectories, options?.inline)) {
120120
return false
121121
}
122+
if (options?.inlineFiles && options?.inlineFiles.includes(id)) {
123+
return false
124+
}
122125
if (matchExternalizePattern(id, moduleDirectories, options?.external)) {
123126
return id
124127
}

‎packages/vite-node/src/server.ts

+11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { performance } from 'node:perf_hooks'
22
import { existsSync } from 'node:fs'
33
import assert from 'node:assert'
4+
import { pathToFileURL } from 'node:url'
45
import { join, normalize, relative, resolve } from 'pathe'
56
import type { TransformResult, ViteDevServer } from 'vite'
67
import createDebug from 'debug'
@@ -105,6 +106,16 @@ export class ViteNodeServer {
105106
this.debugger = new Debugger(server.config.root, options.debug!)
106107
}
107108

109+
if (options.deps.inlineFiles) {
110+
options.deps.inlineFiles = options.deps.inlineFiles.flatMap((file) => {
111+
if (file.startsWith('file://')) {
112+
return file
113+
}
114+
const resolvedId = resolve(file)
115+
return [resolvedId, pathToFileURL(resolvedId).href]
116+
})
117+
}
118+
108119
options.deps.moduleDirectories ??= []
109120

110121
const envValue

‎packages/vite-node/src/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export type Awaitable<T> = T | PromiseLike<T>
99
export interface DepsHandlingOptions {
1010
external?: (string | RegExp)[]
1111
inline?: (string | RegExp)[] | true
12+
inlineFiles?: string[]
1213
/**
1314
* A list of directories that are considered to hold Node.js modules
1415
* Have to include "/" at the start and end of the path

‎packages/vitest/src/node/config/resolveConfig.ts

+23-21
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,27 @@ export function resolveConfig(
307307
resolved.deps.web.transformCss ??= true
308308
resolved.deps.web.transformGlobPattern ??= []
309309

310+
resolved.setupFiles = toArray(resolved.setupFiles || []).map(file =>
311+
resolvePath(file, resolved.root),
312+
)
313+
resolved.globalSetup = toArray(resolved.globalSetup || []).map(file =>
314+
resolvePath(file, resolved.root),
315+
)
316+
resolved.coverage.exclude.push(
317+
...resolved.setupFiles.map(
318+
file =>
319+
`${resolved.coverage.allowExternal ? '**/' : ''}${relative(
320+
resolved.root,
321+
file,
322+
)}`,
323+
),
324+
)
325+
326+
resolved.forceRerunTriggers = [
327+
...resolved.forceRerunTriggers,
328+
...resolved.setupFiles,
329+
]
330+
310331
resolved.server ??= {}
311332
resolved.server.deps ??= {}
312333

@@ -366,6 +387,8 @@ export function resolveConfig(
366387
}
367388
}
368389

390+
resolved.server.deps.inlineFiles ??= []
391+
resolved.server.deps.inlineFiles.push(...resolved.setupFiles)
369392
resolved.server.deps.moduleDirectories ??= []
370393
resolved.server.deps.moduleDirectories.push(
371394
...resolved.deps.moduleDirectories,
@@ -554,27 +577,6 @@ export function resolveConfig(
554577
}
555578
}
556579

557-
resolved.setupFiles = toArray(resolved.setupFiles || []).map(file =>
558-
resolvePath(file, resolved.root),
559-
)
560-
resolved.globalSetup = toArray(resolved.globalSetup || []).map(file =>
561-
resolvePath(file, resolved.root),
562-
)
563-
resolved.coverage.exclude.push(
564-
...resolved.setupFiles.map(
565-
file =>
566-
`${resolved.coverage.allowExternal ? '**/' : ''}${relative(
567-
resolved.root,
568-
file,
569-
)}`,
570-
),
571-
)
572-
573-
resolved.forceRerunTriggers = [
574-
...resolved.forceRerunTriggers,
575-
...resolved.setupFiles,
576-
]
577-
578580
if (resolved.diff) {
579581
resolved.diff = resolvePath(resolved.diff, resolved.root)
580582
resolved.forceRerunTriggers.push(resolved.diff)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if (typeof __vite_ssr_import__ === 'undefined') {
2+
throw new Error('Setup file was externalized')
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { test } from 'vitest'
2+
3+
test('test', () => {})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { defineConfig } from 'vitest/config';
2+
3+
export default defineConfig({
4+
test: {
5+
setupFiles: ['./file-setup'],
6+
server: {
7+
deps: {
8+
// try to force setup file to be external
9+
external: [/file-setup/]
10+
}
11+
}
12+
}
13+
})
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import path from 'node:path'
2+
import { expect, test } from 'vitest'
3+
import { runVitest } from '../../test-utils'
4+
5+
test('import a generated file', async () => {
6+
const root = path.resolve(import.meta.dirname, '../fixtures/inline-setup-file')
7+
8+
const { stderr, exitCode } = await runVitest({ root })
9+
expect(stderr).toBe('')
10+
expect(exitCode).toBe(0)
11+
})

‎vitest.workspace.vscode.ts

+1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ import { defineWorkspace } from 'vitest/config'
33
export default defineWorkspace([
44
'./test/core',
55
'./test/cli',
6+
'./test/config',
67
])

0 commit comments

Comments
 (0)
Please sign in to comment.