To serve multiple Vite applications from a single Go backend, you must generate unique HTML tags for each application using vite.HTMLFragment. Each application requires its own vite.Config instance specifying its unique development URL, entry point, template type, and filesystem context.
Key configuration requirements for multiple apps:
- Unique
ViteURL: Assign a distinct port or path for each app's development server (e.g., http://localhost:5173 and http://localhost:5174/admin). ViteTemplate: Specify the correct template type (e.g., vite.ReactTs or vite.Vue).FS: Use fs.Sub to provide a sub-filesystem for each app's specific distribution directory.AssetsURLPrefix: Use this to prevent path collisions in production by prefixing asset URLs.
// Example for a Main App
assetsApp, _ := fs.Sub(app.DistFS, "app")
viteConfig := vite.Config{
IsDev: app.InDevelopment,
ViteURL: "http://localhost:5173",
ViteEntry: "src/main.tsx",
ViteTemplate: vite.ReactTs,
FS: assetsApp,
}
// Example for an Admin App with a custom prefix
assetsAdmin, _ := fs.Sub(app.DistFS, "admin-app")
viteConfigAdmin := vite.Config{
IsDev: app.InDevelopment,
ViteURL: "http://localhost:5174/admin",
ViteEntry: "src/main.js",
ViteTemplate: vite.Vue,
FS: assetsAdmin,
AssetsURLPrefix: "/admin-app",
}
// Generate the tags
fragment, _ := vite.HTMLFragment(viteConfig)
return fragment.Tags