- internal/web 包:build-tag 双模式(default no-op + fullstack embed)
- embed admin/user SPA via //go:embed all:dist/{admin,user}
- RegisterAdmin/RegisterUser 按 cfg.Web.AdminPath 配置挂载 SPA
- ValidateAdminPath 校验 admin 路径不与 /api、/uploads、/health 冲突
- admin index.html 启动时一次性把 __DJ_ADMIN_BASE__ 替换为
"/"+strings.Trim(prefix,"/"),确保 base href 是绝对路径
- 路由:router.go 在 SetupRouter 末尾挂载 web.Enabled() 块
- 启动:main.go 自动 mkdir db/uploads/logs;release+默认 admin path 时打 warning
- 配置:WebConfig.AdminPath(默认 /admin),config.yml.example 加 web 段
- GoReleaser:增加 fullstack build (linux x amd64/arm64),archive
dujiao-all_<tag>_Linux_<arch>.tar.gz 含 dujiao-server + config.yml.example +
docker-compose.yml + README.md
- CI workflow:release.yml 在 GoReleaser 之前 cross-checkout 同 tag 的
admin/user 仓库(public,无需 PAT),跑 build:fullstack/build,把 dist
embed 到 internal/web/dist
- .gitignore 排除 internal/web/dist/
老用户兼容性:默认 go build 行为完全不变(DCE 把 internal/web 包整体消除,
仅多 64 字节 build-id metadata;现有 Docker 镜像 Dockerfile 不带 -tags 不受影响)。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
15 lines
347 B
Go
15 lines
347 B
Go
//go:build !fullstack
|
|
|
|
package web
|
|
|
|
import "io/fs"
|
|
|
|
// Enabled 报告 fullstack 资源是否被 embed 进当前二进制。
|
|
func Enabled() bool { return false }
|
|
|
|
// AdminFS 默认构建模式下返回 nil(无 embed 资源)。
|
|
func AdminFS() fs.FS { return nil }
|
|
|
|
// UserFS 默认构建模式下返回 nil。
|
|
func UserFS() fs.FS { return nil }
|