diff --git a/.changeset/fiery-suns-type.md b/.changeset/fiery-suns-type.md new file mode 100644 index 0000000..f6dfcfb --- /dev/null +++ b/.changeset/fiery-suns-type.md @@ -0,0 +1,5 @@ +--- +'vite-plugin-solid': patch +--- + +Fix SSR resolve.external being unconditionally applied in Vite 6+ diff --git a/src/index.ts b/src/index.ts index 7ab9445..7910275 100644 --- a/src/index.ts +++ b/src/index.ts @@ -198,6 +198,7 @@ export default function solidPlugin(options: Partial = {}): Plugin { let replaceDev = false; let projectRoot = process.cwd(); let isTestMode = false; + let solidPkgsConfig: Awaited>; return { name: 'solid', @@ -212,7 +213,7 @@ export default function solidPlugin(options: Partial = {}): Plugin { if (!userConfig.resolve) userConfig.resolve = {}; userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias); - const solidPkgsConfig = await crawlFrameworkPkgs({ + solidPkgsConfig = await crawlFrameworkPkgs({ viteUserConfig: userConfig, root: projectRoot || process.cwd(), isBuild: command === 'build', @@ -277,7 +278,7 @@ export default function solidPlugin(options: Partial = {}): Plugin { include: [...nestedDeps, ...solidPkgsConfig.optimizeDeps.include], exclude: solidPkgsConfig.optimizeDeps.exclude, }, - ssr: solidPkgsConfig.ssr, + ...(!isVite6 ? { ssr: solidPkgsConfig.ssr } : {}), ...(test.server ? { test } : {}), }; }, @@ -301,6 +302,21 @@ export default function solidPlugin(options: Partial = {}): Plugin { ...(isTestMode && !opts.isSsrTargetWebworker && !options.ssr ? ['browser'] : []), ...config.resolve.conditions, ]; + + // Set resolve.noExternal and resolve.external for SSR environment (Vite 6+) + // Only set resolve.external if noExternal is not true (to avoid conflicts with plugins like Cloudflare) + if (isVite6 && name === 'ssr' && solidPkgsConfig) { + if (config.resolve.noExternal !== true) { + config.resolve.noExternal = [ + ...(Array.isArray(config.resolve.noExternal) ? config.resolve.noExternal : []), + ...solidPkgsConfig.ssr.noExternal, + ]; + config.resolve.external = [ + ...(Array.isArray(config.resolve.external) ? config.resolve.external : []), + ...solidPkgsConfig.ssr.external, + ]; + } + } }, configResolved(config) {