Skip to content

Commit 74c75d0

Browse files
committed
Support Vite 6 resolve conditions
1 parent 873f4ce commit 74c75d0

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

.changeset/tame-comics-repair.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'vite-plugin-solid': patch
3+
---
4+
5+
Support Vite 6's `resolve.conditions` breaking change

src/index.ts

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { readFileSync } from 'fs';
44
import { mergeAndConcat } from 'merge-anything';
55
import { createRequire } from 'module';
66
import solidRefresh from 'solid-refresh/babel';
7-
import { createFilter } from 'vite';
7+
import { createFilter, version } from 'vite';
88
import type { Alias, AliasOptions, Plugin, FilterPattern } from 'vite';
99
import { crawlFrameworkPkgs } from 'vitefu';
1010

@@ -14,6 +14,8 @@ const runtimePublicPath = '/@solid-refresh';
1414
const runtimeFilePath = require.resolve('solid-refresh/dist/solid-refresh.mjs');
1515
const runtimeCode = readFileSync(runtimeFilePath, 'utf-8');
1616

17+
const isVite6 = version.startsWith('6.');
18+
1719
/** Possible options for the extensions property */
1820
export interface ExtensionOptions {
1921
typescript?: boolean;
@@ -236,11 +238,13 @@ export default function solidPlugin(options: Partial<Options> = {}): Plugin {
236238
*/
237239
// esbuild: { include: /\.ts$/ },
238240
resolve: {
239-
conditions: [
240-
'solid',
241-
...(replaceDev ? ['development'] : []),
242-
...(userConfig.mode === 'test' && !options.ssr ? ['browser'] : []),
243-
],
241+
conditions: isVite6
242+
? undefined
243+
: [
244+
'solid',
245+
...(replaceDev ? ['development'] : []),
246+
...(userConfig.mode === 'test' && !options.ssr ? ['browser'] : []),
247+
],
244248
dedupe: nestedDeps,
245249
alias: [{ find: /^solid-refresh$/, replacement: runtimePublicPath }],
246250
},
@@ -253,6 +257,22 @@ export default function solidPlugin(options: Partial<Options> = {}): Plugin {
253257
};
254258
},
255259

260+
// @ts-ignore This hook only works in Vite 6
261+
async configEnvironment(_, config, opts) {
262+
config.resolve ??= {};
263+
// Emulate Vite default fallback for `resolve.conditions` if not set
264+
if (config.resolve.conditions == null) {
265+
// @ts-ignore These exports only exist in Vite 6
266+
const { defaultClientConditions, defaultServerConditions } = await import('vite');
267+
if (config.consumer === 'client' || opts.isSsrTargetWebworker) {
268+
config.resolve.conditions = [...defaultClientConditions];
269+
} else {
270+
config.resolve.conditions = [...defaultServerConditions];
271+
}
272+
}
273+
config.resolve.conditions.push('solid');
274+
},
275+
256276
configResolved(config) {
257277
needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false;
258278
},

0 commit comments

Comments
 (0)