From 07f4be3fc13a432deca39ecad0278428dc716879 Mon Sep 17 00:00:00 2001 From: xyzm Date: Tue, 10 Feb 2026 20:46:06 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=E7=A7=BB=E9=99=A4Dockerfile=E4=B8=AD?= =?UTF-8?q?=E7=9A=84mailcap=E4=BE=9D=E8=B5=96=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除Dockerfile中不必要的mailcap包以精简镜像 - 将前端配置从process.env改为import.meta.env以适配现代构建工具 - 移除Go代码中手动设置mime类型的冗余逻辑 - 修复静态资源路由路径格式(/assets改为assets/) - 优化导入语句格式和代码结构 --- Dockerfile | 2 +- main.go | 7 +------ routers/router.go | 21 +++++++++++---------- web/config.js | 2 +- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 28b2e65..c6165bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,7 +44,7 @@ FROM debian:stable-slim ENV TZ=Asia/Shanghai RUN apt-get update \ - && apt-get install -y ca-certificates tzdata mailcap \ + && apt-get install -y ca-certificates tzdata \ && rm -rf /var/lib/apt/lists/* WORKDIR /app diff --git a/main.go b/main.go index 5f3a85c..c0798b2 100644 --- a/main.go +++ b/main.go @@ -11,7 +11,6 @@ import ( "message-nest/routers" "message-nest/service/cron_msg_service" "message-nest/service/cron_service" - "mime" "net/http" "os" @@ -20,7 +19,7 @@ import ( ) var ( - //go:embed all:web/dist + //go:embed web/dist/* f embed.FS //go:embed .release* @@ -28,10 +27,6 @@ var ( ) func init() { - // 设置 mime 类型,防止 docker 镜像中缺少 mime 类型导致 js 文件加载失败 - mime.AddExtensionType(".js", "application/javascript") - mime.AddExtensionType(".css", "text/css") - constant.InitReleaseInfo(rf) setting.Setup() logging.Setup() diff --git a/routers/router.go b/routers/router.go index 086d915..05b3fd2 100644 --- a/routers/router.go +++ b/routers/router.go @@ -3,16 +3,17 @@ package routers import ( "embed" "fmt" - "github.com/gin-gonic/gin" "io" "io/fs" "message-nest/middleware" "message-nest/pkg/setting" "message-nest/routers/api" - "message-nest/routers/api/v1" - "message-nest/routers/api/v2" + v1 "message-nest/routers/api/v1" + v2 "message-nest/routers/api/v2" "net/http" "strings" + + "github.com/gin-gonic/gin" ) // AppendCors 添加是否跨域(debug模式开启) @@ -54,12 +55,12 @@ func AppendServerStaticHtmlWithPrefix(router gin.IRouter, f embed.FS, pathPrefix } htmlContent := string(content) - + // 注入 base 标签和配置脚本 // base 标签必须在 head 的最前面,确保所有相对路径都基于这个 base baseTag := fmt.Sprintf(``, pathPrefix) configScript := fmt.Sprintf(``, pathPrefix) - + // 在 标签后立即插入 base 标签 htmlContent = strings.Replace(htmlContent, "", ""+baseTag, 1) // 在 标签前注入配置 @@ -73,7 +74,7 @@ func AppendServerStaticHtmlWithPrefix(router gin.IRouter, f embed.FS, pathPrefix // 无路径前缀时,使用原有逻辑 if r, ok := router.(*gin.Engine); ok { r.Use(middleware.StaticCacheMiddleware()) - r.StaticFS("/assets", http.FS(assets)) + r.StaticFS("assets/", http.FS(assets)) r.GET("/", func(ctx *gin.Context) { ctx.FileFromFS("/", http.FS(dist)) }) @@ -93,13 +94,13 @@ func InitRouter(f embed.FS) *gin.Engine { app.Use(gin.Recovery()) AppendCors(app) - + // 获取 URL 前缀 pathPrefix := setting.ServerSetting.UrlPrefix if pathPrefix != "" && pathPrefix[0] != '/' { pathPrefix = "/" + pathPrefix } - + // 如果有路径前缀,创建路由组 var router gin.IRouter if pathPrefix != "" { @@ -107,7 +108,7 @@ func InitRouter(f embed.FS) *gin.Engine { } else { router = app } - + AppendServerStaticHtmlWithPrefix(router, f, pathPrefix) router.POST("/auth", api.GetAuth) @@ -171,7 +172,7 @@ func InitRouter(f embed.FS) *gin.Engine { apiV1.POST("/templates/edit", v1.EditMessageTemplate) apiV1.POST("/templates/delete", v1.DeleteMessageTemplate) apiV1.POST("/templates/preview", v1.PreviewMessageTemplate) - + // messageTemplate instances apiV1.GET("/templates/ins/get", v1.GetTemplateWithIns) apiV1.POST("/templates/ins/addone", v1.AddTemplateIns) diff --git a/web/config.js b/web/config.js index 9facad0..5a102a0 100644 --- a/web/config.js +++ b/web/config.js @@ -1,6 +1,6 @@ // config.js -const isProduction = process.env.NODE_ENV === 'prod' || process.env.NODE_ENV === 'production'; +const isProduction = import.meta.env.PROD; // 从 window 对象获取路径前缀(由后端注入或通过 API 获取) const getPathPrefix = () => {