跳至主要内容

Wails v2 Beta for Windows

·阅读时长 9 分钟
Lea Anthony

两年前,我还在悉尼的火车上,首次在 Reddit 上发布了 Wails,当时并没有料到它会引起多大关注。几天后,一位知名科技博主发布了一段教程视频,并给了它好评。从那以后,人们对这个项目的兴趣开始激增。

很明显,人们对于在 Go 项目中添加 Web 前端十分兴奋,几乎立刻将这个项目推向了我的最初概念证明的范畴之外。当时,Wails 使用 webview 项目来处理前端,而 Windows 唯一的选择是 IE11 渲染器。许多错误报告都源于这个限制:糟糕的 JavaScript/CSS 支持,并且没有调试工具。这种开发体验令人沮丧,但当时并没有什么办法可以解决这个问题。

很长一段时间以来,我一直坚信微软最终会解决他们的浏览器问题。世界正在不断发展,前端开发蓬勃发展,而 IE 已经跟不上步伐。当微软宣布将 Chromium 作为其新浏览器方向的基础时,我知道 Wails 使用 Chromium 只是时间问题,并且会将 Windows 开发者体验提升到一个新的水平。

今天,我很高兴地宣布:**Wails v2 Beta for Windows**!这个版本中包含大量内容,所以请准备好一杯饮料,坐下来,让我们开始吧……

没有 CGO 依赖性!

不,我没有开玩笑:没有 CGO 依赖性 🤯!Windows 的问题在于,与 MacOS 和 Linux 不同,它没有默认编译器。此外,CGO 需要一个 mingw 编译器,并且有许多不同的安装选项。移除 CGO 要求大大简化了安装过程,并且使调试变得容易了许多。虽然我付出了相当多的努力来实现这一点,但大部分功劳应该归功于 John Chadwick,他不仅开始了一些项目来实现这一点,而且也愿意让其他人使用这些项目并进行扩展。此外,还要感谢 Tad Vizbaraswinc 项目,它让我踏上了这条道路。

WebView2 Chromium 渲染器


最后,Windows 开发人员终于可以使用一流的渲染引擎来构建应用程序了!扭曲你的前端代码以在 Windows 上运行的日子一去不复返了。除此之外,你还获得了一流的开发者工具体验!

然而,WebView2 组件需要将 WebView2Loader.dll 放在二进制文件旁边。这使得分发过程比我们 gophers 习惯的要复杂一些。所有我所知道的解决方案和库(使用 WebView2 的)都有这种依赖性。

但是,我很高兴地宣布,Wails 应用程序没有任何这种要求!感谢 John Chadwick 的魔法,我们能够将这个 dll 打包到二进制文件中,让 Windows 加载它,就像它存在于磁盘上一样。

gophers 欢呼吧!单一二进制文件梦想继续!

新功能


人们一直要求支持原生菜单。Wails 终于满足了你的需求。现在可以使用应用程序菜单了,并且支持大多数原生菜单功能。这包括标准菜单项、复选框、单选组、子菜单和分隔符。

在 v1 中,人们一直强烈要求能够更好地控制窗口本身。我很高兴地宣布,现在专门为此推出了新的运行时 API。它功能丰富,支持多显示器配置。此外,还改进了对话框 API:现在,你可以使用现代的、原生的对话框,这些对话框具有丰富的配置,可以满足你的所有对话框需求。

现在可以选择在项目中生成 IDE 配置。这意味着,如果你在支持的 IDE 中打开项目,它将已经配置好,可以构建和调试你的应用程序。目前支持 VSCode,但我们希望很快支持其他 IDE,如 Goland。


不需要捆绑资产

v1 中的一个痛点是,需要将整个应用程序压缩成单个 JS 和 CSS 文件。我很高兴地宣布,在 v2 中,不需要以任何方式、形状或形式捆绑资产。想要加载本地图片?使用带有本地 src 路径的 <img> 标签。想要使用很酷的字体?复制它,并将路径添加到 CSS 中。

哇,这听起来像一个 web 服务器……

是的,它的工作方式就像一个 web 服务器,但它并不是。

那么,如何包含我的资产呢?

你只需要将包含所有资产的单个 embed.FS 传递到你的应用程序配置中。它们甚至不需要位于顶层目录中 - Wails 会为你处理这些问题。

新的开发体验


现在,资产不需要捆绑,这使得新的开发体验成为可能。新的 wails dev 命令将构建并运行你的应用程序,但它不会使用 embed.FS 中的资产,而是直接从磁盘加载它们。

它还提供以下附加功能

  • 热重载 - 对前端资产的任何更改都会触发应用程序前端的自动重载
  • 自动重建 - 对 Go 代码的任何更改都会重建并重新启动应用程序

除此之外,一个 web 服务器将在端口 34115 上启动。它将向连接到它的任何浏览器提供你的应用程序。所有连接的 web 浏览器都将响应系统事件,如资产更改时的热重载。

在 Go 中,我们习惯于在应用程序中处理结构体。将结构体发送到我们的前端并在应用程序中将其用作状态通常很有用。在 v1 中,这是一个非常手动且对开发者来说有点负担的过程。我很高兴地宣布,在 v2 中,在开发模式下运行的任何应用程序都将自动为所有结构体生成 TypeScript 模型,这些结构体是绑定方法的输入或输出参数。这使得数据模型在两个世界之间能够无缝交换。

除此之外,另一个 JS 模块是动态生成的,它包装了所有绑定的方法。它为你的方法提供了 JSDoc,并在你的 IDE 中提供了代码补全和提示。当你在包装 Go 代码的自动生成模块中按 Tab 键时,自动导入数据模型真的很有用!

远程模板


快速启动并运行应用程序一直是 Wails 项目的关键目标。在发布时,我们尝试涵盖当时许多流行的框架:react、vue 和 angular。前端开发的世界非常有主见、发展迅速,而且很难跟上步伐!因此,我们发现我们的基本模板很快过时了,这造成了维护上的麻烦。这也意味着我们没有针对最新技术的酷炫现代模板。

在 v2 中,我希望赋予社区力量,让你能够自己创建和托管模板,而不是依赖 Wails 项目。因此,你现在可以使用社区支持的模板创建项目!我希望这将激励开发者创建充满活力的项目模板生态系统。我真的很期待我们的开发者社区能创造什么!

总结

Wails v2 代表着该项目的一个新的基础。这个版本的目标是收集有关新方法的反馈,并在正式发布之前修复任何 bug。你的意见非常欢迎。请将任何反馈意见发送到 v2 Beta 讨论板。

要走到这一步,经历了许多曲折、转折、改变方向和折返。这部分是由于早期需要更改的技术决策,部分是由于我们花费时间构建的解决方法的一些核心问题在 upstream 被修复了:Go 的 embed 功能就是一个很好的例子。幸运的是,所有事情都在合适的时间组合在一起,今天我们拥有了最好的解决方案。我相信等待是值得的 - 即使在两个月前,这也不可能实现。

我还需要向以下人员表示衷心的感谢 🙏,因为没有他们,这个版本将无法发布

  • Misite Bao - 在中文翻译方面是一位真正的干将,并且是一位令人难以置信的 bug 发现者。
  • John Chadwick - 他在 go-webview2go-winloader 上的出色工作使我们今天使用的 Windows 版本成为可能。
  • Tad Vizbaras - 他对 winc 项目的实验是迈向纯 Go Wails 的第一步。
  • Mat Ryer - 他的支持、鼓励和反馈真正帮助推动了项目发展。

最后,我要特别感谢所有 项目赞助商,包括 JetBrains,他们的支持以多种方式推动了项目的幕后发展。

我期待着看到人们在这个项目的下一个激动人心的阶段中使用 Wails 构建什么!

Lea。

PS:MacOS 和 Linux 用户不必感到被冷落 - 移植到这个新基础的工作正在积极进行中,大部分艰苦的工作已经完成。坚持住!

PPS:如果您或您的公司发现 Wails 有用,请考虑赞助该项目。谢谢!