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:
+28
-15
@@ -1,34 +1,47 @@
|
||||
// Command sundynix-desktop —— 第 1 层客户端,Wails 原生桌面应用入口。
|
||||
// Command sundynix-desktop —— 第 1 层客户端,Wails v3 原生桌面应用入口。
|
||||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"log"
|
||||
|
||||
"github.com/wailsapp/wails/v2"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
|
||||
"github.com/wailsapp/wails/v2/pkg/options/mac"
|
||||
"github.com/wailsapp/wails/v3/pkg/application"
|
||||
)
|
||||
|
||||
//go:embed all:frontend/dist
|
||||
var assets embed.FS
|
||||
|
||||
func main() {
|
||||
app := NewApp()
|
||||
_ = wails.Run(&options.App{
|
||||
// v3:application.New + Service 绑定 + 显式 Window。
|
||||
app := application.New(application.Options{
|
||||
Name: "sundynix-agentix",
|
||||
Description: "事件驱动的 AI Agent 工作台",
|
||||
Services: []application.Service{
|
||||
application.NewService(&App{}), // 暴露原生能力(文件/另存为/打开/通知)给前端
|
||||
},
|
||||
Assets: application.AssetOptions{
|
||||
Handler: application.AssetFileServerFS(assets),
|
||||
},
|
||||
Mac: application.MacOptions{
|
||||
ApplicationShouldTerminateAfterLastWindowClosed: true,
|
||||
},
|
||||
})
|
||||
|
||||
app.Window.NewWithOptions(application.WebviewWindowOptions{
|
||||
Title: "sundynix-agentix",
|
||||
Width: 1440,
|
||||
Height: 900,
|
||||
MinWidth: 1100,
|
||||
MinHeight: 700,
|
||||
BackgroundColour: &options.RGBA{R: 11, G: 13, B: 18, A: 1}, // 与深色主题一致 #0b0d12
|
||||
AssetServer: &assetserver.Options{Assets: assets},
|
||||
// macOS:隐藏标题栏、内容铺满到顶(保留红绿灯交通灯),顶栏自定义为可拖拽区。
|
||||
Mac: &mac.Options{
|
||||
TitleBar: mac.TitleBarHiddenInset(),
|
||||
BackgroundColour: application.NewRGB(11, 13, 18), // 与深色主题一致 #0b0d12
|
||||
// macOS:隐藏标题栏、内容铺满到顶(保留交通灯),顶栏自定义为可拖拽区。
|
||||
Mac: application.MacWindow{
|
||||
TitleBar: application.MacTitleBarHiddenInset,
|
||||
},
|
||||
OnStartup: app.startup,
|
||||
// Bind: TS/Go 强绑定 —— 把 App 的方法暴露给前端
|
||||
Bind: []any{app},
|
||||
URL: "/",
|
||||
})
|
||||
|
||||
if err := app.Run(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user