參與貢獻

編輯此文件

翻譯文件,或在您的電腦上開啟完整專案。

在您選擇提交成果之前,不會發布任何內容。

部落格

Wails v2 Windows 版 Beta

Wails 的版本資訊與公告

leaanthony閱讀時間 2 分鐘

Wails 螢幕截圖

就在 2 年多前,我於雪梨的火車上首次在 Reddit 宣布 Wails 時,沒想到它會受到太多關注。幾天後,一位高產的科技影音部落客發布了教學影片,給予正面評價;從那時起,大家對這個專案的興趣便急遽攀升。

很明顯,大家對於在 Go 專案中加入 Web 前端感到興奮,幾乎立刻就將這個專案推進到超越我所建立的概念驗證階段。當時,Wails 使用 webview 專案處理前端,而 Windows 唯一的選項是 IE11 算繪器。許多錯誤回報都源於這項限制:JavaScript/CSS 支援不佳,而且沒有可用於偵錯的開發人員工具。這樣的開發體驗令人挫折,但當時也沒有太多辦法能改善。

長久以來,我一直堅信 Microsoft 最終必須解決其瀏覽器的問題。世界持續向前,前端開發蓬勃發展,而 IE 已無法勝任。當 Microsoft 宣布改以 Chromium 作為新瀏覽器發展方向的基礎時,我知道 Wails 遲早能夠採用它,並將 Windows 上的開發體驗提升到全新層次。

今天,我很高興宣布:Wails v2 Windows 版 Beta!這個版本有大量內容值得深入介紹,所以請準備一杯飲料,坐下來,讓我們開始吧……

不再依賴 CGO!

不,我不是在開玩笑:不再依賴 CGO了 🤯!Windows 與 MacOS 和 Linux 不同,並未內建預設編譯器。此外,CGO 需要 mingw 編譯器,而其安裝方式又多得令人眼花撩亂。移除 CGO 需求後,不僅大幅簡化了設定,也讓偵錯容易許多。雖然我投入了不少心力才讓這項功能順利運作,但大部分功勞都應歸於 John Chadwick;他不僅發起了幾個促成此事的專案,也樂於讓他人接手這些專案並在其基礎上繼續發展。另外也要感謝 Tad Vizbaras,正是他的 winc 專案引領我走上這條路。

WebView2 Chromium 轉譯引擎

開發人員工具螢幕截圖

Windows 開發人員終於能為應用程式使用一流的轉譯引擎!再也不必費盡心思調整前端程式碼,才能讓它在 Windows 上運作。此外,還能享有一流的開發人員工具體驗!

不過,WebView2 元件確實要求將WebView2Loader.dll放在二進位檔旁。這讓散布流程比我們 Go 開發人員所習慣的稍微麻煩一些。據我所知,所有使用 WebView2 的解決方案和程式庫都有這項相依性。

不過,我非常興奮地宣布,Wails 應用程式完全沒有這項要求!多虧了John Chadwick的巧妙技術,我們可以將這個 dll 封裝在二進位檔內,並讓 Windows 像它實際存在於磁碟上一樣載入它。

Go 開發人員歡呼吧!單一二進位檔的夢想仍在延續!

新功能

wails-menus 螢幕截圖

許多人要求支援原生選單,Wails 終於滿足了這項需求。現在已可使用應用程式選單,並支援大多數原生選單功能,包括標準選單項目、核取方塊、選項按鈕群組、子選單及分隔線。

在 v1 中,許多使用者都希望能更深入地控制視窗本身。我很高興地宣布,我們推出了專為此用途設計的新執行階段 API。它功能豐富,並支援多螢幕設定。對話方塊 API 也有所改進:現在,你可以使用具備豐富設定選項的現代化原生對話方塊,滿足所有對話方塊需求。

現在,你可以選擇在產生專案時一併產生 IDE 設定。這表示,如果你使用支援的 IDE 開啟專案,它便已預先設定好,可以建置及偵錯應用程式。目前支援 VSCode,但我們希望不久後也能支援 Goland 等其他 IDE。

VSCode 螢幕截圖

不需要封裝資產

v1 的一大痛點,是必須將整個應用程式壓縮成單一 JS 與 CSS 檔案。我很高興地宣布,在 v2 中完全不需要以任何方式封裝資產。想載入本機圖片嗎?使用帶有本機 src 路徑的<img>標籤即可。想使用很酷的字型嗎?將它複製進來,再於 CSS 中加入其路徑即可。

哇,聽起來就像網頁伺服器……

沒錯,它的運作方式就像網頁伺服器,但它並不是網頁伺服器。

那麼,我該如何納入資產?

只要將包含所有資產的單一embed.FS傳入應用程式設定即可。這些資產甚至不必位於頂層目錄中,Wails 會自行處理。

全新的開發體驗

瀏覽器螢幕截圖

由於資產現在不需要封裝,因此帶來了全新的開發體驗。新的wails dev命令會建置並執行應用程式,但不會使用embed.FS中的資產,而是直接從磁碟載入。

它還提供以下額外功能:

  • 熱重新載入——前端資產的任何變更都會觸發應用程式前端自動重新載入
  • 自動重新建置——Go 程式碼的任何變更都會使應用程式重新建置並重新啟動

除此之外,系統還會在連接埠34115上啟動網頁伺服器,向任何連線至該連接埠的瀏覽器提供你的應用程式。所有已連線的網頁瀏覽器都會回應系統事件,例如資產變更時的熱重新載入。

使用 Go 開發應用程式時,我們習慣處理結構體。將結構體傳送至前端,並將其作為應用程式的狀態使用,通常很實用。在 v1 中,這項流程高度依賴手動操作,對開發者而言有些負擔。我很高興地宣布,在 v2 中,只要應用程式以開發模式執行,就會為所有作為繫結方法輸入或輸出參數的結構體自動產生 TypeScript 模型。如此一來,便能在兩端之間順暢交換資料模型。

除此之外,系統還會動態產生另一個 JS 模組,封裝所有繫結方法。該模組會為這些方法提供 JSDoc,讓 IDE 能提供程式碼自動完成與提示。在封裝 Go 程式碼的自動產生模組中按下 Tab 鍵時,資料模型便會自動匯入,實在很酷!

遠端範本

遠端範本螢幕截圖

讓應用程式快速啟動並開始運作,一直是 Wails 專案的主要目標。專案推出時,我們曾嘗試涵蓋當時許多現代框架:React、Vue 和 Angular。前端開發領域充滿各種強烈主張、發展迅速,也很難時時掌握最新動態!因此,我們發現基礎範本很快就會過時,造成維護上的難題。這也意味著我們無法為最新、最出色的技術堆疊提供酷炫的現代範本。

在 v2 中,我希望賦予社群更多自主能力,讓大家可以自行建立及託管範本,而不必依賴 Wails 專案。因此,你現在可以使用由社群支援的範本來建立專案!我希望這能激勵開發者打造充滿活力的專案範本生態系。我非常期待看到我們的開發者社群能創造出什麼成果!

結語

Wails v2 為專案奠定了新的基礎。此版本旨在收集大家對新方法的意見,並在正式發布前修正所有錯誤。非常歡迎你提供意見。請將任何意見提交至v2 Beta討論區。

走到這一步,過程中經歷了許多波折、方向調整,甚至推倒重來。部分原因是早期的技術決策需要修改,另一部分則是我們曾投入時間建置權宜解法的一些核心問題,後來已在上游獲得修正;Go 的 embed 功能就是一個很好的例子。所幸一切都在適當的時機到位,如今我們已擁有目前所能實現的最佳解決方案。我相信這番等待是值得的——即使在2個月前,這一切都還不可能實現。

我也要向以下人士致上萬分感謝 :pray:,因為若沒有他們,這個版本根本不會誕生:

  • Misite Bao——他不辭辛勞地投入中文翻譯工作,更是一位不可思議的錯誤獵人。
  • John Chadwick——他在go-webview2和go-winloader上的傑出成果,成就了我們今日的 Windows 版本。
  • Tad Vizbaras——對他的winc專案進行實驗,是 Wails 邁向純 Go 實作之路的第一步。
  • Mat Ryer——他的支持、鼓勵與意見,確實大力推動了專案向前發展。

最後,我要特別感謝所有專案贊助者,其中包括JetBrains;他們的支持以許多幕後方式推動著專案發展。

我期待看到大家在專案接下來這個令人振奮的階段中,使用 Wails 打造出什麼成果!

Lea。

附註:MacOS 和 Linux 使用者不必覺得受到冷落——移植到這個新基礎的工作正積極進行中,而且大部分艱鉅的工作都已完成。請再耐心等等!

再附註:如果你或貴公司認為 Wails 很實用,請考慮贊助本專案。謝謝!