跳到主要内容
版本:下个版本 🚧

从 v1 迁移

概述

Wails v2 与 v1 相比有重大变化。 本文档旨在重点介绍迁移现有项目的更改和步骤。

创建应用程序

在 v1 中,使用wails.CreateApp来创建主应用程序,使用app.Bind来添加绑定,然后使用app.Run()运行应用程序。

示例:

v1
 app := wails.CreateApp(&wails.AppConfig{
Title: "MyApp",
Width: 1024,
Height: 768,
JS: js,
CSS: css,
Colour: "#131313",
})
app.Bind(basic)
app.Run()

在 v2 中,只有一个方法wails.Run()接受应用程序参数选项

v2
    err := wails.Run(&options.App{
Title: "MyApp",
Width: 800,
Height: 600,
Assets: assets,
Bind: []interface{}{
basic,
},
})

绑定

在 v1 中,可以绑定任意函数和结构。 在 v2 中,这已被简化为仅绑定结构。 以前传递给 v1Bind()中的方法的结构实例现在在应用程序参数选项Bind字段中指定:

v1
  app := wails.CreateApp(/* options */)
app.Bind(basic)
v2
    err := wails.Run(&options.App{
/* other options */
Bind: []interface{}{
basic,
},
})

在 v1 中,绑定方法在window.backend中。 这已更改为window.go

应用程序生命周期

In v1, there were 2 special methods in a bound struct: WailsInit() and WailsShutdown(). In v1, there were 2 special methods in a bound struct: WailsInit() and WailsShutdown(). These have been replaced with 3 lifecycle hooks as part of the application options: In v1, there were 2 special methods in a bound struct: WailsInit() and WailsShutdown(). These have been replaced with 3 lifecycle hooks as part of the application options:

注意:前端 Dom 加载完成回调替换了 v1 中的 wails:ready 系统事件。

这些方法可以是标准函数,但通常的做法是将它们作为结构的一部分:

v2
    basic := NewBasicApp()
err := wails.Run(&options.App{
/* Other Options */
OnStartup: basic.startup,
OnShutdown: basic.shutdown,
OnDomReady: basic.domready,
})
...
type Basic struct {
ctx context.Context
}
func (b *Basic) startup(ctx context.Context) {
b.ctx = ctx
}
...
type Basic struct {
ctx context.Context
}
func (b *Basic) startup(ctx context.Context) {
b.ctx = ctx
}
...
type Basic struct {
ctx context.Context
}
func (b *Basic) startup(ctx context.Context) {
b.ctx = ctx
}
...

运行时

v2 中的运行时比 v1 丰富得多,支持菜单、窗口操作和更好的对话框。 方法的签名略有变化 - 请参阅运行时

在 v1 中,运行时可通过传递给WailsInit(). 在 v2 中,运行时已移出到它自己的包。 In v2, the runtime has been moved out to its own package. 运行时中的每个方法都采用context.Context传递给了应用启动回调方法。

Runtime Example
package main

import "github.com/wailsapp/wails/v2/pkg/runtime"

type Basic struct {
ctx context.Context
}

// startup is called at application startup
func (a *App) startup(ctx context.Context) {
a.ctx = ctx
runtime.LogInfo(ctx, "Application Startup called!")
}
}
}

资源

在 v2 最大的变化是资源的处理方式。

在 v1 中,资源通过 2 个应用程序参数选项传递:

  • JS - 应用程序的 Javascript
  • CSS - 应用程序的 CSS

这意味着生成单个 JS 和 CSS 文件的责任在于开发人员。 这本质上需要使用繁琐的打包程序,例如 webpack。

在 v2 中,Wails 不对您的前端资源做任何预设,就像网络服务器一样。 您的所有应用程序资源都作为embed.FS.

这意味着不需要打包您的资源、将图像编码为 Base64 或尝试使用奇葩的打包工具配置来使用自定义字体。

在启动时,Wails 将扫描给定的embed.FSindex.html并将其位置用作所有其他应用程序资源的根路径 - 就像网络服务器一样。

示例:应用程序具有以下项目布局。 所有最终资源都放在 frontend/dist目录中:

.
.
.
├── build/
├── frontend/
│ └── dist/
│ ├── index.html
│ ├── main.js
│ ├── main.css
│ └── logo.svg
├── main.go
└── wails.json

应用程序可以通过简单地创建一个embed.FS来使用这些资源:

Assets Example
//go:embed frontend/dist
var assets embed.FS

func main() {
err := wails.Run(&options.App{
/* Other Options */
Assets: assets,
})
}

当然,如果您愿意,也可以使用打包工具。 唯一的要求是在 Wails 中使用embed.FS,将最终的程序资源目录传递给应用程序参数选项Assets键。

项目配置

在 v1 中,项目配置存储在项目根的 project.json 文件中。 在 v2 中,项目配置存储在项目根部的 wails.json 文件中。

文件的格式略有不同。 下面是区别:

v1v2注解
namename
description移除
author / nameauthor / name
author / emailauthor / email
versionversion
binarynameoutputfilename变更
frontend / dir移除
frontend / installfrontend:install变更
frontend / buildfrontend:build变更
frontend / bridge移除
frontend / serve移除
tags移除
wailsjsdir生成 wailsjs 模块的目录
assetdirdev 模式下前端资源文件目录
reloaddirs以逗号分隔的附加目录列表,用于监视更改并在开发模式下触发重新加载。 This is normally inferred and could be left empty.
reloaddirsComma separated list of additional directories to watch for changes and to trigger reloads in dev mode. 这只需要一些更重要的资源配置。