vite.config 接入 vike 插件并改产出 dist/client+dist/server;feed 白名单 route 匹配 /、/board/:id、/post/:id(.html);spa catch-all ssr:false;onRenderHtml renderToReadableStream 等 allReady 输出完整 HTML 并带主题/缩放脚本;onRenderClient 沿用样式表等待+冷启动预热+hydrate 回退;getHomeStoreState 作用域 + hydrating 变体入 RequestScope;删除 index.html 与 main.tsx
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import path from 'path';
|
||
import { defineConfig } from 'vite';
|
||
import react from '@vitejs/plugin-react';
|
||
import vike from 'vike/plugin';
|
||
|
||
// 与 Go 后端默认端口一致,可通过 VITE_API_PORT 覆盖
|
||
const apiPort = process.env.VITE_API_PORT || '3000';
|
||
const apiTarget = `http://localhost:${apiPort}`;
|
||
|
||
export default defineConfig({
|
||
plugins: [react(), vike()],
|
||
resolve: {
|
||
alias: {
|
||
'@': path.resolve(__dirname, './src'),
|
||
},
|
||
},
|
||
base: '/',
|
||
build: {
|
||
// Vike 双构建:产出 dist/client(静态资源)+ dist/server(SSR 渲染入口)
|
||
outDir: 'dist',
|
||
emptyOutDir: true,
|
||
rollupOptions: {
|
||
output: {
|
||
manualChunks(id) {
|
||
if (!id.includes('node_modules')) return;
|
||
if (id.includes('dompurify')) return 'purify-vendor';
|
||
if (id.includes('@tanstack/react-virtual')) return 'virtual-vendor';
|
||
if (id.includes('@radix-ui') || id.includes('lucide-react')) return 'ui-vendor';
|
||
if (
|
||
id.includes('react-dom')
|
||
|| id.includes('react-router')
|
||
|| /[/\\]node_modules[/\\]react[/\\]/.test(id)
|
||
) {
|
||
return 'react-vendor';
|
||
}
|
||
},
|
||
},
|
||
},
|
||
},
|
||
server: {
|
||
port: 5173,
|
||
strictPort: true,
|
||
proxy: {
|
||
'/api': apiTarget,
|
||
'/uploads': apiTarget,
|
||
'/media': apiTarget,
|
||
'/oauth': apiTarget,
|
||
'/.well-known': apiTarget,
|
||
},
|
||
},
|
||
});
|