@@ -521,18 +521,80 @@ def _vite_config_template(**kwargs):
521521 """
522522 base = kwargs .get ("base" , "/" )
523523
524- # Generate assetsDir from base path
525- # Remove trailing slash, add /assets, then .slice(1) to remove leading slash
526- assets_path = base .rstrip ("/" ) + "/assets"
527-
528- return f"""import {{ defineConfig }} from 'vite'
529- import react from '@vitejs/plugin-react'
530-
531- export default defineConfig({{
532- plugins: [react()],
533- base: "{ base } ",
534- assetsDir: "{ assets_path } ".slice(1),
535- }})"""
524+ return rf"""import {{ fileURLToPath, URL }} from "url";
525+ import {{ reactRouter }} from "@react-router/dev/vite";
526+ import {{ defineConfig }} from "vite";
527+ import safariCacheBustPlugin from "./vite-plugin-safari-cachebust";
528+
529+ // Ensure that bun always uses the react-dom/server.node functions.
530+ function alwaysUseReactDomServerNode() {{
531+ return {{
532+ name: "vite-plugin-always-use-react-dom-server-node",
533+ enforce: "pre",
534+
535+ resolveId(source, importer) {{
536+ if (
537+ typeof importer === "string" &&
538+ importer.endsWith("/entry.server.node.tsx") &&
539+ source.includes("react-dom/server")
540+ ) {{
541+ return this.resolve("react-dom/server.node", importer, {{
542+ skipSelf: true,
543+ }});
544+ }}
545+ return null;
546+ }},
547+ }};
548+ }}
549+
550+ export default defineConfig((config) => ({{
551+ plugins: [
552+ alwaysUseReactDomServerNode(),
553+ reactRouter(),
554+ safariCacheBustPlugin(),
555+ ],
556+ build: {{
557+ assetsDir: "{ base } assets".slice(1),
558+ rollupOptions: {{
559+ jsx: {{}},
560+ output: {{
561+ advancedChunks: {{
562+ groups: [
563+ {{
564+ test: /env.json/,
565+ name: "reflex-env",
566+ }},
567+ ],
568+ }},
569+ }},
570+ }},
571+ }},
572+ experimental: {{
573+ enableNativePlugin: false,
574+ }},
575+ server: {{
576+ port: process.env.PORT,
577+ watch: {{
578+ ignored: [
579+ "**/.web/backend/**",
580+ "**/.web/reflex.install_frontend_packages.cached",
581+ ],
582+ }},
583+ }},
584+ resolve: {{
585+ mainFields: ["browser", "module", "jsnext"],
586+ alias: [
587+ {{
588+ find: "$",
589+ replacement: fileURLToPath(new URL("./", import.meta.url)),
590+ }},
591+ {{
592+ find: "@",
593+ replacement: fileURLToPath(new URL("./public", import.meta.url)),
594+ }},
595+ ],
596+ }},
597+ }}));"""
536598
537599
538600def _stateful_component_template (** kwargs ):
0 commit comments