Use fastapi-vue-setup, merging its template scripts to old Paskia entry point and devserver. Simplified CLI, no longer uses serve subcommand. Fixed the URL displayed on banner to show to actual frontend/caddy server even in devmode.
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* FastAPI-Vue Vite Plugin
|
||||
*
|
||||
* Configures Vite for FastAPI backend integration:
|
||||
* - Proxies /api/* requests to the FastAPI backend
|
||||
* - Builds to the Python module's frontend-build directory
|
||||
*
|
||||
* Environment variables (with defaults):
|
||||
* FASTAPI_VUE_BACKEND_URL=http://localhost:5180 - Backend API URL for proxying
|
||||
*/
|
||||
|
||||
const backendUrl = process.env.FASTAPI_VUE_BACKEND_URL || "http://localhost:5180"
|
||||
|
||||
export default function fastapiVue({ paths = ["/api"] } = {}) {
|
||||
// Build proxy configuration for each path
|
||||
const proxy = {}
|
||||
for (const path of paths) {
|
||||
proxy[path] = {
|
||||
target: backendUrl,
|
||||
changeOrigin: false,
|
||||
ws: true,
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
name: "fastapi-vite",
|
||||
config: () => ({
|
||||
server: { proxy },
|
||||
build: {
|
||||
outDir: "../paskia/frontend-build",
|
||||
emptyOutDir: true,
|
||||
},
|
||||
}),
|
||||
}
|
||||
}
|
||||
+9
-18
@@ -4,6 +4,7 @@ import { resolve } from 'node:path'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import { existsSync, renameSync, mkdirSync } from 'node:fs'
|
||||
import sirv from 'sirv'
|
||||
import fastapiVue from './vite-plugin-fastapi.js'
|
||||
|
||||
// Auth host mode: when set, clients accessing the auth host get /auth/ at / and /auth/admin/ at /admin/
|
||||
const authHost = process.env.PASKIA_AUTH_HOST
|
||||
@@ -12,6 +13,14 @@ export default defineConfig(({ command }) => ({
|
||||
appType: 'mpa',
|
||||
publicDir: 'public',
|
||||
plugins: [
|
||||
fastapiVue({ paths: [
|
||||
"/auth/api",
|
||||
"/auth/ws",
|
||||
// Passphrase links: /auth/word1.word2.word3.word4.word5
|
||||
"^/auth/[a-z]+\\.[a-z]+\\.[a-z]+\\.[a-z]+\\.[a-z]+$",
|
||||
// Passphrase links: /word1.word2.word3.word4.word5
|
||||
"^/[a-z]+\\.[a-z]+\\.[a-z]+\\.[a-z]+\\.[a-z]+$",
|
||||
] }),
|
||||
vue(),
|
||||
// Auth host routing: rewrite paths when accessing dedicated auth host
|
||||
// Must run before serve-examples to handle / correctly
|
||||
@@ -89,24 +98,6 @@ export default defineConfig(({ command }) => ({
|
||||
allowedHosts: true,
|
||||
fs: {
|
||||
allow: ['..']
|
||||
},
|
||||
proxy: {
|
||||
// Only proxy these two specific backend API paths
|
||||
'/auth/api': {
|
||||
target: 'http://localhost:4402'
|
||||
},
|
||||
'/auth/ws': {
|
||||
target: 'http://localhost:4402',
|
||||
ws: true
|
||||
},
|
||||
// Passphrase links: /auth/word1.word2.word3.word4.word5
|
||||
'^/auth/[a-z]+\\.[a-z]+\\.[a-z]+\\.[a-z]+\\.[a-z]+$': {
|
||||
target: 'http://localhost:4402'
|
||||
},
|
||||
// Passphrase links: /word1.word2.word3.word4.word5
|
||||
'^/[a-z]+\\.[a-z]+\\.[a-z]+\\.[a-z]+\\.[a-z]+$': {
|
||||
target: 'http://localhost:4402'
|
||||
}
|
||||
}
|
||||
},
|
||||
build: {
|
||||
|
||||
Reference in New Issue
Block a user