build: make frontend embedding optional

This commit is contained in:
jbwfu
2026-03-05 11:36:56 +08:00
parent bc09625708
commit a6db3c8a63
6 changed files with 53 additions and 39 deletions
+16 -14
View File
@@ -64,22 +64,24 @@ func Setup(c *Controllers) *gin.Engine {
root = router.Group("")
}
// 静态资源服务(Vue SPA),带缓存头部
staticFS := static.GetFS()
assetsGroup := root.Group("/assets")
assetsGroup.Use(cacheControl("public, max-age=31536000, immutable")) // 带哈希的资源缓存1年
assetsGroup.StaticFS("/", http.FS(mustSubFS(staticFS, "assets")))
if staticFS != nil {
// 静态资源服务(Vue SPA),带缓存头部
assetsGroup := root.Group("/assets")
assetsGroup.Use(cacheControl("public, max-age=31536000, immutable")) // 带哈希的资源缓存
assetsGroup.StaticFS("/", http.FS(mustSubFS(staticFS, "assets")))
// logo.svg 短缓存实现
root.GET("/logo.svg", func(ctx *gin.Context) {
data, err := static.ReadFile("logo.svg")
if err != nil {
ctx.Status(404)
return
}
ctx.Header("Cache-Control", "public, max-age=86400") // 缓存1天
ctx.Data(200, "image/svg+xml", data)
})
// logo.svg 短缓存实现
root.GET("/logo.svg", func(ctx *gin.Context) {
data, err := static.ReadFile("logo.svg")
if err != nil {
ctx.Status(404)
return
}
ctx.Header("Cache-Control", "public, max-age=86400") // 缓存1天
ctx.Data(200, "image/svg+xml", data)
})
}
// API 路由组
api := root.Group("/api/v1")
+3 -11
View File
@@ -1,28 +1,20 @@
//go:build web
package static
import (
"embed"
"io/fs"
"net/http"
)
//go:embed dist/*
var distFS embed.FS
// GetFileSystem 返回嵌入的静态文件系统
func GetFileSystem() http.FileSystem {
subFS, err := fs.Sub(distFS, "dist")
if err != nil {
panic(err)
}
return http.FS(subFS)
}
// GetFS 返回嵌入的 fs.FS
func GetFS() fs.FS {
subFS, err := fs.Sub(distFS, "dist")
if err != nil {
panic(err)
return nil
}
return subFS
}
+16
View File
@@ -0,0 +1,16 @@
//go:build !web
package static
import (
"io/fs"
"os"
)
func GetFS() fs.FS {
return nil
}
func ReadFile(name string) ([]byte, error) {
return nil, os.ErrNotExist
}