chore: release binary front assets with cdn

This commit is contained in:
duorameng
2026-04-24 09:26:54 +08:00
parent d460266c67
commit 1e37259c98
4 changed files with 42 additions and 3 deletions
+10 -1
View File
@@ -28,7 +28,16 @@ build:
CGO_ENABLED=0 $(GOBUILD) $(LDFLAGS) -o $(BINARY) main.go CGO_ENABLED=0 $(GOBUILD) $(LDFLAGS) -o $(BINARY) main.go
# Build release version (Frontend + Backend with embedded assets) # Build release version (Frontend + Backend with embedded assets)
release: build-web release:
cd web && npm ci && npm run build
@mkdir -p bin
rm -rf internal/static/dist
cp -r web/dist internal/static/dist
CGO_ENABLED=0 $(GOBUILD) $(LDFLAGS) $(TAGS_WEB) -o $(BINARY) main.go
# Build release version (Frontend + Backend with embedded assets)
release-binary:
cd web && npm ci && VITE_RELEASE_OPTIMIZE=true npm run build
@mkdir -p bin @mkdir -p bin
rm -rf internal/static/dist rm -rf internal/static/dist
cp -r web/dist internal/static/dist cp -r web/dist internal/static/dist
+1 -1
View File
@@ -17,7 +17,7 @@ createApp(App)
.use(router) .use(router)
.use(VueMonacoEditorPlugin, { .use(VueMonacoEditorPlugin, {
paths: { paths: {
vs: `${origin}${BASE_URL}/assets/vs` vs: __MONACO_CDN__ || `${origin}${BASE_URL}/assets/vs`
} }
}) })
.mount('#app') .mount('#app')
+1
View File
@@ -4,6 +4,7 @@ declare global {
__BASE_URL__?: string __BASE_URL__?: string
__API_VERSION__?: string __API_VERSION__?: string
} }
const __MONACO_CDN__: string | null
} }
export {} export {}
+30 -1
View File
@@ -44,11 +44,38 @@ const compressionPlugin = () => ({
} }
} as const) } as const)
// Release optimization plugin to offload fonts to CDN
const releaseOptimizePlugin = (isOptimize: boolean) => ({
name: 'release-optimize-plugin',
transformIndexHtml(html: string) {
if (isOptimize) {
return html.replace(
'</head>',
` <link rel="preconnect" href="https://fonts.geekzu.org">\n <link rel="stylesheet" href="https://fonts.geekzu.org/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Noto+Sans+SC:wght@100..900&display=swap">\n </head>`
)
}
return html
},
transform(code: string, id: string) {
if (isOptimize && id.includes('index.css')) {
return {
code: code
.replace(/@import\s+["']@fontsource-variable\/inter\/index\.css["'];/g, '/* Removed for CDN */')
.replace(/@import\s+["']@fontsource-variable\/noto-sans-sc\/index\.css["'];/g, '/* Removed for CDN */')
.replace(/@import\s+["']@fontsource-variable\/jetbrains-mono\/index\.css["'];/g, '/* Removed for CDN */'),
map: null
}
}
}
})
const isOptimize = process.env.VITE_RELEASE_OPTIMIZE === 'true'
export default defineConfig({ export default defineConfig({
plugins: [ plugins: [
vue(), vue(),
tailwindcss(), tailwindcss(),
viteStaticCopy({ !isOptimize && viteStaticCopy({
targets: [ targets: [
{ {
src: 'node_modules/monaco-editor/min/vs', src: 'node_modules/monaco-editor/min/vs',
@@ -56,6 +83,7 @@ export default defineConfig({
} }
] ]
}), }),
releaseOptimizePlugin(isOptimize),
compressionPlugin(), compressionPlugin(),
VitePWA({ VitePWA({
registerType: 'autoUpdate', registerType: 'autoUpdate',
@@ -147,5 +175,6 @@ export default defineConfig({
} }
}, },
define: { define: {
__MONACO_CDN__: isOptimize ? JSON.stringify('https://registry.npmmirror.com/monaco-editor/0.52.0/files/min/vs') : 'null'
} }
}) })