86 lines
2.2 KiB
TypeScript
86 lines
2.2 KiB
TypeScript
import fs from 'node:fs'
|
||
import path from 'node:path'
|
||
import { fileURLToPath, URL } from 'node:url'
|
||
import tailwindcss from '@tailwindcss/vite'
|
||
import vue from '@vitejs/plugin-vue'
|
||
import { defineConfig, loadEnv, type Plugin } from 'vite'
|
||
|
||
// 支持 /generate、/me、/library 这类不带 .html 的页面地址(dev 与 preview)
|
||
function extensionlessHtmlPlugin(root: string): Plugin {
|
||
const rewrite = (
|
||
req: { url?: string },
|
||
_res: unknown,
|
||
next: () => void,
|
||
): void => {
|
||
const url = req.url || ''
|
||
const [pathname, query] = url.split('?')
|
||
if (
|
||
pathname &&
|
||
pathname !== '/' &&
|
||
!pathname.endsWith('/') &&
|
||
!/\.[^/]+$/.test(pathname) &&
|
||
fs.existsSync(path.join(root, pathname + '.html'))
|
||
) {
|
||
req.url = pathname + '.html' + (query ? '?' + query : '')
|
||
}
|
||
next()
|
||
}
|
||
return {
|
||
name: 'extensionless-html',
|
||
configureServer(server) {
|
||
server.middlewares.use(rewrite)
|
||
},
|
||
configurePreviewServer(server) {
|
||
server.middlewares.use(rewrite)
|
||
},
|
||
}
|
||
}
|
||
|
||
export default defineConfig(({ mode }) => {
|
||
const env = loadEnv(mode, process.cwd(), '')
|
||
const skillAgentTarget = env.VITE_SKILL_AGENT_URL || 'http://127.0.0.1:8100'
|
||
const teamApiTarget = env.VITE_TEAM_API_URL || 'https://laimiaoai.com'
|
||
const skillAgentProxy = {
|
||
'/skill-agent': {
|
||
target: skillAgentTarget,
|
||
changeOrigin: true,
|
||
rewrite: (path: string) => path.replace(/^\/skill-agent/, ''),
|
||
},
|
||
}
|
||
const teamApiProxy = {
|
||
'/api': {
|
||
target: teamApiTarget,
|
||
changeOrigin: true,
|
||
},
|
||
}
|
||
|
||
return {
|
||
plugins: [extensionlessHtmlPlugin(process.cwd()), vue(), tailwindcss()],
|
||
resolve: {
|
||
alias: {
|
||
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
||
},
|
||
},
|
||
server: {
|
||
port: 5181,
|
||
proxy: { ...skillAgentProxy, ...teamApiProxy },
|
||
},
|
||
preview: {
|
||
proxy: { ...skillAgentProxy, ...teamApiProxy },
|
||
},
|
||
build: {
|
||
rollupOptions: {
|
||
input: {
|
||
index: 'index.html',
|
||
app: 'app.html',
|
||
generate: 'generate.html',
|
||
me: 'me.html',
|
||
login: 'login/index.html',
|
||
invite: 'invite/index.html',
|
||
library: 'library.html',
|
||
},
|
||
},
|
||
},
|
||
}
|
||
})
|