Skip to content

Commit 84287fc

Browse files
thebanjomaticthebanjomatichi-ogawa
authoredJan 16, 2025··
fix: re-apply default conditions if using vite 6 or later (#7071)
Co-authored-by: thebanjomatic <ahines@gmail.com> Co-authored-by: Hiroshi Ogawa <hi.ogawa.zz@gmail.com>
1 parent b526896 commit 84287fc

File tree

13 files changed

+83
-4
lines changed

13 files changed

+83
-4
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import * as vite from 'vite'
2+
3+
type Vite6Options = typeof vite & Partial<{
4+
defaultServerConditions?: string[]
5+
}>
6+
7+
/**
8+
* In Vite 6+, providing a value for resolve.conditions overrides the defaults
9+
* In Vite 5, passing ["node"] will be merged with the defaults
10+
*
11+
* @returns the appropriate conditions array depending on the vite version
12+
*
13+
*/
14+
export function getDefaultServerConditions() {
15+
return (vite as Vite6Options).defaultServerConditions ?? ['node']
16+
}

‎packages/vitest/src/node/plugins/index.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { generateScopedClassName } from '../../integrations/css/css-modules'
1212
import { resolveApiServerConfig } from '../config/resolveConfig'
1313
import { Vitest } from '../core'
1414
import { createViteLogger, silenceImportViteIgnoreWarning } from '../viteLogger'
15+
import { getDefaultServerConditions } from './conditions'
1516
import { CoverageTransform } from './coverageTransform'
1617
import { CSSEnablerPlugin } from './cssEnabler'
1718
import { MocksPlugins } from './mocks'
@@ -73,6 +74,8 @@ export async function VitestPlugin(
7374
open = testConfig.uiBase ?? '/__vitest__/'
7475
}
7576

77+
const conditions = getDefaultServerConditions()
78+
7679
const config: ViteConfig = {
7780
root: viteConfig.test?.root || options.root,
7881
esbuild:
@@ -90,7 +93,7 @@ export async function VitestPlugin(
9093
// setting this option can bypass that and fallback to cjs version
9194
mainFields: [],
9295
alias: testConfig.alias,
93-
conditions: ['node'],
96+
conditions,
9497
},
9598
server: {
9699
...testConfig.api,
@@ -119,7 +122,7 @@ export async function VitestPlugin(
119122
// by default Vite resolves `module` field, which not always a native ESM module
120123
// setting this option can bypass that and fallback to cjs version
121124
mainFields: [],
122-
conditions: ['node'],
125+
conditions,
123126
},
124127
},
125128
},

‎packages/vitest/src/node/plugins/workspace.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { basename, dirname, relative, resolve } from 'pathe'
77
import { configDefaults } from '../../defaults'
88
import { generateScopedClassName } from '../../integrations/css/css-modules'
99
import { createViteLogger, silenceImportViteIgnoreWarning } from '../viteLogger'
10+
import { getDefaultServerConditions } from './conditions'
1011
import { CoverageTransform } from './coverageTransform'
1112
import { CSSEnablerPlugin } from './cssEnabler'
1213
import { MocksPlugins } from './mocks'
@@ -62,14 +63,16 @@ export function WorkspaceVitestPlugin(
6263
}
6364
}
6465

66+
const conditions = getDefaultServerConditions()
67+
6568
const config: ViteConfig = {
6669
root,
6770
resolve: {
6871
// by default Vite resolves `module` field, which not always a native ESM module
6972
// setting this option can bypass that and fallback to cjs version
7073
mainFields: [],
7174
alias: testConfig.alias,
72-
conditions: ['node'],
75+
conditions,
7376
},
7477
esbuild: viteConfig.esbuild === false
7578
? false
@@ -104,7 +107,7 @@ export function WorkspaceVitestPlugin(
104107
// by default Vite resolves `module` field, which not always a native ESM module
105108
// setting this option can bypass that and fallback to cjs version
106109
mainFields: [],
107-
conditions: ['node'],
110+
conditions,
108111
},
109112
},
110113
},

‎pnpm-lock.yaml

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default 'default'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default 'module'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default 'node'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "@vitest/test-dep-conditions",
3+
"type": "module",
4+
"private": true,
5+
"exports": {
6+
".": {
7+
"module": "./module.js",
8+
"node": "./node.js",
9+
"default": "./default.js"
10+
}
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default 'module'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { test, expect } from 'vitest';
2+
import condition from '@vitest/test-dep-conditions';
3+
4+
test('condition is correct', () => {
5+
expect(condition).toBe('module')
6+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { defineConfig } from 'vitest/config'
2+
3+
export default defineConfig({})

‎test/config/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"test": "vitest --typecheck.enabled"
77
},
88
"devDependencies": {
9+
"@vitest/test-dep-conditions": "file:./deps/test-dep-conditions",
910
"tinyexec": "^0.3.2",
1011
"vite": "latest",
1112
"vitest": "workspace:*"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { expect, test } from 'vitest'
2+
import { runVitest } from '../../test-utils'
3+
4+
test('"module" condition for external dep', async () => {
5+
const { stderr } = await runVitest({
6+
root: 'fixtures/default-conditions',
7+
})
8+
9+
expect(stderr).toBe('')
10+
})
11+
12+
test('"module" condition for inline dep', async () => {
13+
const { stderr } = await runVitest({
14+
root: 'fixtures/default-conditions',
15+
server: {
16+
deps: {
17+
inline: ['@vitest/test-dep-conditions'],
18+
},
19+
},
20+
})
21+
22+
expect(stderr).toBe('')
23+
})

0 commit comments

Comments
 (0)
Please sign in to comment.