mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-19 05:39:33 +08:00
- 修复触发器分组进入设计页时误设只读,恢复索引/外键页增删改按钮显示 - 重构 TableDesigner 数据源方言识别,移除 MySQL 与固定方言白名单硬限制 - 按能力控制索引/外键/表备注编辑入口,并补充多方言 DDL 生成与通用兜底 - 收敛已知不支持场景:sqlite/duckdb/tdengine 禁用外键编辑,sqlite 禁用表备注编辑 - Monaco 改为按需 worker(editor/json)并补齐 vite 类型声明,避免构建类型报错 - 细化 Vite manualChunks(antd/monaco 子模块拆分),消除 >500k chunk 告警 - refs #115
120 lines
4.1 KiB
TypeScript
120 lines
4.1 KiB
TypeScript
import { defineConfig } from 'vite'
|
|
import react from '@vitejs/plugin-react'
|
|
|
|
const normalizeModuleId = (id: string): string => id.replace(/\\/g, '/')
|
|
|
|
const sanitizeChunkToken = (raw: string): string =>
|
|
String(raw || '')
|
|
.trim()
|
|
.replace(/[^a-zA-Z0-9_-]/g, '-')
|
|
.replace(/-+/g, '-')
|
|
.replace(/^-|-$/g, '') || 'misc'
|
|
|
|
const firstSegmentAfter = (id: string, marker: string): string => {
|
|
const idx = id.indexOf(marker)
|
|
if (idx < 0) return ''
|
|
const rest = id.substring(idx + marker.length)
|
|
const [segment] = rest.split('/')
|
|
return sanitizeChunkToken(segment)
|
|
}
|
|
|
|
const resolveMonacoChunk = (id: string, prefix: string): string | undefined => {
|
|
if (!id.includes('/node_modules/monaco-editor/')) return undefined
|
|
|
|
if (id.includes('/esm/vs/language/typescript/')) {
|
|
if (id.includes('typescriptServices')) return `${prefix}-ts-services`
|
|
return `${prefix}-typescript`
|
|
}
|
|
if (id.includes('/esm/vs/language/json/')) return `${prefix}-json`
|
|
if (id.includes('/esm/vs/language/css/')) return `${prefix}-css`
|
|
if (id.includes('/esm/vs/language/html/')) return `${prefix}-html`
|
|
|
|
if (id.includes('/esm/vs/editor/contrib/')) {
|
|
return `${prefix}-editor-contrib-${firstSegmentAfter(id, '/esm/vs/editor/contrib/')}`
|
|
}
|
|
if (id.includes('/esm/vs/editor/browser/')) {
|
|
return `${prefix}-editor-browser-${firstSegmentAfter(id, '/esm/vs/editor/browser/')}`
|
|
}
|
|
if (id.includes('/esm/vs/editor/common/')) {
|
|
return `${prefix}-editor-common-${firstSegmentAfter(id, '/esm/vs/editor/common/')}`
|
|
}
|
|
if (id.includes('/esm/vs/editor/')) return `${prefix}-editor`
|
|
|
|
if (id.includes('/esm/vs/base/browser/')) return `${prefix}-base-browser`
|
|
if (id.includes('/esm/vs/base/common/')) return `${prefix}-base-common`
|
|
if (id.includes('/esm/vs/base/')) return `${prefix}-base`
|
|
|
|
if (id.includes('/esm/vs/platform/')) return `${prefix}-platform`
|
|
|
|
return `${prefix}-misc`
|
|
}
|
|
|
|
// https://vitejs.dev/config/
|
|
export default defineConfig({
|
|
plugins: [react()],
|
|
server: {
|
|
port: 5173,
|
|
strictPort: true,
|
|
},
|
|
build: {
|
|
outDir: 'dist', // Standard Wails output directory
|
|
emptyOutDir: true,
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks(id) {
|
|
const moduleId = normalizeModuleId(id)
|
|
if (!moduleId.includes('node_modules')) return undefined
|
|
|
|
const monacoChunk = resolveMonacoChunk(moduleId, 'vendor-monaco')
|
|
if (monacoChunk) {
|
|
return monacoChunk
|
|
}
|
|
if (moduleId.includes('/node_modules/@monaco-editor/react/')) return 'vendor-monaco-react'
|
|
|
|
if (moduleId.includes('/node_modules/antd/es/')) {
|
|
return `vendor-antd-${firstSegmentAfter(moduleId, '/node_modules/antd/es/')}`
|
|
}
|
|
if (moduleId.includes('/node_modules/antd/')) return 'vendor-antd'
|
|
if (moduleId.includes('/node_modules/@ant-design/icons/')) return 'vendor-antd-icons'
|
|
if (moduleId.includes('/node_modules/@ant-design/cssinjs/')) return 'vendor-antd-css'
|
|
if (moduleId.includes('/node_modules/rc-')) return 'vendor-antd-rc'
|
|
|
|
if (moduleId.includes('/node_modules/@dnd-kit/')) return 'vendor-dnd-kit'
|
|
if (moduleId.includes('/node_modules/sql-formatter/')) return 'vendor-sql-formatter'
|
|
|
|
if (
|
|
moduleId.includes('/node_modules/react/')
|
|
|| moduleId.includes('/node_modules/react-dom/')
|
|
|| moduleId.includes('/node_modules/scheduler/')
|
|
) {
|
|
return 'vendor-react'
|
|
}
|
|
|
|
if (
|
|
moduleId.includes('/node_modules/zustand/')
|
|
|| moduleId.includes('/node_modules/uuid/')
|
|
|| moduleId.includes('/node_modules/clsx/')
|
|
|| moduleId.includes('/node_modules/react-resizable/')
|
|
) {
|
|
return 'vendor-utils'
|
|
}
|
|
|
|
return 'vendor-misc'
|
|
},
|
|
},
|
|
},
|
|
},
|
|
worker: {
|
|
format: 'es',
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks(id) {
|
|
const moduleId = normalizeModuleId(id)
|
|
if (!moduleId.includes('node_modules')) return undefined
|
|
return resolveMonacoChunk(moduleId, 'worker-monaco')
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|