feat(desktop): 迁移 Wails v2 → v3(架构/目录/绑定重写)[WIP]
从 wails/v2 v2.12.0 迁到 v3 v3.0.0-alpha2.117,采用 v3 工程规范:
Go 侧:
- main.go:wails.Run(options.App) → application.New(Options{Services,Assets,Mac})
+ app.Window.NewWithOptions(WebviewWindowOptions) + app.Run();窗口选项照搬
(1440×900/min 1100×700/#0b0d12/Mac TitleBarHiddenInset)
- app.go:App 结构体绑定 → v3 Service(application.NewService);去 startup/ctx 注入;
SaveFileDialog 改 v3 链式 API(application.Get().Dialog.SaveFile().SetFilename().
AddFilter().PromptForSingleSelection());5 个原生方法保留
- go.mod wails/v2→v3、go 1.25
构建:
- wails.json → Taskfile.yml + build/(config.yml 填产品信息 + 各平台配置)
- 删移动端脚手架(ios/android),桌面端只留 darwin/windows/linux
- .gitignore 改为只忽略 build/bin(build/ 构建系统需提交)
前端:
- vite.config 接 @wailsio/runtime/plugins/vite 插件 + WAILS_VITE_PORT
- package.json 加 @wailsio/runtime;wails3 generate bindings → frontend/bindings/
- desktop.ts:window.go.main.App → import { App } from bindings;桌面态检测改
window._wails.environment(原生注入);isMacDesktop 用 System.IsMac()
- version.ts:runtime.BrowserOpenURL → @wailsio/runtime Browser.OpenURL;测试同步更新
- tsconfig 加 allowJs(消费 JSDoc 绑定)
验证进度:Go 编译过 + tsc 干净 + 48 前端测试绿 + 前端 vite build 通过。
**未完成:整体 wails3 build/dev 原生窗口实跑 + 原生能力(另存为/打开/外链)联调**——下次续。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# Wails Server Mode Dockerfile
|
||||
# Multi-stage build for a minimal image.
|
||||
#
|
||||
# Defaults produce a pure-Go, fully static binary on a distroless/static base:
|
||||
# the smallest, most secure image, and correct for the default (CGO-free) app.
|
||||
#
|
||||
# If your app needs CGO, override the build args, e.g.:
|
||||
# docker build --build-arg CGO_ENABLED=1 \
|
||||
# --build-arg GO_IMAGE=golang:bookworm \
|
||||
# --build-arg RUNTIME_IMAGE=gcr.io/distroless/base-debian12 \
|
||||
# -f build/docker/Dockerfile.server .
|
||||
# CGO needs a C toolchain in the builder and a libc in the runtime image; keep
|
||||
# the builder and runtime libc compatible (a glibc builder -> a glibc runtime).
|
||||
# The Taskfile passes these through: task build:docker CGO_ENABLED=1 GO_IMAGE=... RUNTIME_IMAGE=...
|
||||
|
||||
ARG GO_IMAGE=golang:alpine
|
||||
ARG RUNTIME_IMAGE=gcr.io/distroless/static-debian12
|
||||
ARG CGO_ENABLED=0
|
||||
|
||||
# Build stage
|
||||
FROM ${GO_IMAGE} AS builder
|
||||
ARG CGO_ENABLED
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install build dependencies: git always; a C compiler only when CGO is enabled.
|
||||
# Supports both apk (alpine) and apt (debian/bookworm) base images.
|
||||
RUN if command -v apk >/dev/null 2>&1; then \
|
||||
apk add --no-cache git $([ "$CGO_ENABLED" = "1" ] && echo gcc musl-dev); \
|
||||
else \
|
||||
apt-get update && apt-get install -y --no-install-recommends git $([ "$CGO_ENABLED" = "1" ] && echo gcc libc6-dev) && rm -rf /var/lib/apt/lists/*; \
|
||||
fi
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Remove local replace directive if present (for production builds)
|
||||
RUN sed -i '/^replace/d' go.mod || true
|
||||
|
||||
# Download dependencies
|
||||
RUN go mod tidy
|
||||
|
||||
# Build the production server binary.
|
||||
# - server,production tags: HTTP server mode with production code paths (no dev
|
||||
# logger/asset middleware), matching the desktop production build.
|
||||
# - CGO_ENABLED defaults to 0 for a fully static binary (distroless/static);
|
||||
# override with --build-arg CGO_ENABLED=1 (see header) for CGO apps.
|
||||
RUN CGO_ENABLED=${CGO_ENABLED} go build -tags server,production -trimpath -buildvcs=false -ldflags="-s -w" -o server .
|
||||
|
||||
# Runtime stage - minimal image
|
||||
FROM ${RUNTIME_IMAGE}
|
||||
|
||||
# Copy the binary
|
||||
COPY --from=builder /app/server /server
|
||||
|
||||
# Copy frontend assets
|
||||
COPY --from=builder /app/frontend/dist /frontend/dist
|
||||
|
||||
# Expose the default port
|
||||
EXPOSE 8080
|
||||
|
||||
# Bind to all interfaces (required for Docker)
|
||||
# Can be overridden at runtime with -e WAILS_SERVER_HOST=...
|
||||
ENV WAILS_SERVER_HOST=0.0.0.0
|
||||
|
||||
# Run the server
|
||||
ENTRYPOINT ["/server"]
|
||||
Reference in New Issue
Block a user