feat(frontend): file:// bundle support (HashRouter + build:desktop)
- main.tsx: use HashRouter when loaded over file:// (packaged desktop has no server for History API path routing); keep BrowserRouter on the http web build. - add build:desktop script (vite build --base=./ --outDir dist-desktop) so assets resolve under file://; gitignore dist-desktop. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -22,3 +22,4 @@ dist-ssr
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
dist-desktop
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
"dev": "vite",
|
||||
"build": "tsc -b && vite build",
|
||||
"lint": "eslint .",
|
||||
"preview": "vite preview"
|
||||
"preview": "vite preview",
|
||||
"build:desktop": "tsc -b && vite build --base=./ --outDir dist-desktop"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.16.0",
|
||||
|
||||
11
src/main.tsx
11
src/main.tsx
@@ -1,16 +1,21 @@
|
||||
import { StrictMode } from 'react'
|
||||
import { createRoot } from 'react-dom/client'
|
||||
import { BrowserRouter } from 'react-router-dom'
|
||||
import { BrowserRouter, HashRouter } from 'react-router-dom'
|
||||
import './index.css'
|
||||
import App from './App.tsx'
|
||||
import { AuthProvider } from './auth/AuthContext'
|
||||
|
||||
// The packaged desktop app loads the bundled SPA over file://, where the
|
||||
// History API has no server to back path routing — use HashRouter there.
|
||||
// The web build (served over http behind nginx) keeps clean BrowserRouter URLs.
|
||||
const Router = window.location.protocol === 'file:' ? HashRouter : BrowserRouter
|
||||
|
||||
createRoot(document.getElementById('root')!).render(
|
||||
<StrictMode>
|
||||
<BrowserRouter>
|
||||
<Router>
|
||||
<AuthProvider>
|
||||
<App />
|
||||
</AuthProvider>
|
||||
</BrowserRouter>
|
||||
</Router>
|
||||
</StrictMode>,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user