环境搭建与Wails3初体验


01 - 环境搭建与 Wails3 初体验


本章目标

  • 安装 Go 1.25+ 和 Node.js 18+
  • 安装 Wails3 CLI
  • 理解 Wails3 项目结构
  • 跑通第一个 Wails3 桌面窗口
  • 了解开发模式的热重载机制

1.1 安装 Go

Windows

go.dev/dl 下载 .msi 安装包,双击安装即可。

安装完成后打开终端验证:

go version
# go version go1.25.0 windows/amd64

macOS

brew install go

Linux

# 下载最新版本
wget https://go.dev/dl/go1.25.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.25.0.linux-amd64.tar.gz

# 添加到 PATH (写入 ~/.bashrc 或 ~/.zshrc)
export PATH=$PATH:/usr/local/go/bin

配置 Go 代理(国内推荐)

go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPRIVATE=git.mycompany.com

💡 知识点: GOPROXY 是 Go 模块代理,goproxy.cn 是国内镜像,下载依赖更快。GOPRIVATE 排除私有仓库不走代理。


1.2 安装 Node.js

Windows / macOS

nodejs.org 下载 LTS 版本(18.x 或 20.x),安装后验证:

node --version
# v20.11.0

npm --version
# 10.2.4

⚠️ 注意: Wails3 需要 Node.js 18+,不支持更旧的版本。


1.3 安装 Wails3 CLI

go install github.com/wailsapp/wails/v3/cmd/wails3@latest

验证安装:

wails3 version
# wails3 v3.0.0-alpha.xx

📌 关键概念: Wails3 是 Wails 的第三代版本(v3),当前仍处于 alpha 阶段。它相比 v2 的主要变化是服务架构和绑定机制的彻底重构,更简洁、更 Go 化。

Windows 额外步骤

Wails3 在 Windows 上依赖 WebView2 Runtime

  • Windows 11:已内置,无需额外安装
  • Windows 10:如果没装过,去 Microsoft Edge WebView2 下载 Evergreen Bootstrapper 安装

1.4 创建项目

# 创建项目目录
mkdir pet-content-creator
cd pet-content-creator

# 初始化 Go module
go mod init pet-content-creator

# 添加 Wails3 依赖
go get github.com/wailsapp/wails/v3@latest

1.5 写第一个 Wails3 应用

创建 main.go

package main

import (
    "embed"
    "log"

    "github.com/wailsapp/wails/v3/pkg/application"
)

//go:embed all:frontend/dist
var assets embed.FS

func main() {
    // 创建 Wails 应用
    app := application.New(application.Options{
        Name:        "pet-content-creator",
        Description: "AI驱动的今日头条宠物内容创作工具",
        Assets: application.AssetOptions{
            Handler: application.AssetFileServerFS(assets),
        },
        Mac: application.MacOptions{
            ApplicationShouldTerminateAfterLastWindowClosed: true,
        },
    })

    // 创建主窗口
    app.Window.NewWithOptions(application.WebviewWindowOptions{
        Title:  "今日头条宠物内容创作工具",
        Width:  1200,
        Height: 800,
        URL:    "/",
    })

    // 启动应用
    err := app.Run()
    if err != nil {
        log.Fatal(err)
    }
}

1.6 搭建前端

初始化 React + TypeScript + Vite

cd frontend
npm create vite@latest . -- --template react-ts

💡 注意:运行 npm create vite@latest . 时,注意末尾的 . 表示在当前目录创建,不要创建嵌套目录。

安装依赖

npm install

修改 frontend/index.html

确保 index.html 有一个挂载点:

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>宠物内容创作工具</title>
  </head>
  <body>
    <div id="root"></div>
    <script type="module" src="/src/main.tsx"></script>
  </body>
</html>

修改 frontend/src/main.tsx

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";

ReactDOM.createRoot(document.getElementById("root")!).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

修改 frontend/src/App.tsx

function App() {
  return (
    <div style={{ padding: 40, fontFamily: "system-ui" }}>
      <h1>🐾 今日头条宠物内容创作工具</h1>
      <p>即将开始一段精彩的旅程...</p>
    </div>
  );
}

export default App;

1.7 第一次运行

开发模式(热重载)

# 在项目根目录运行
wails3 dev

此时 Wails3 会:

  1. 编译 Go 后端
  2. 启动 Vite 开发服务器(默认端口 9245)
  3. 打开桌面窗口,加载前端页面

你修改 Go 代码或前端代码,窗口都会自动刷新。

💡 知识点: Wails3 开发模式下,前端通过 Vite 的 HMR (Hot Module Replacement) 实现热更新;Go 后端修改后会重新编译并重启应用。这个过程通常在 2-3 秒内完成。

如果提示缺少 Taskfile

Wails3 v3 依赖 Taskfile 来管理构建任务。创建 Taskfile.yml

version: '3'

vars:
  APP_NAME: "pet-content-creator"
  VITE_PORT: '{{.WAILS_VITE_PORT | default 9245}}'

tasks:
  dev:
    summary: Runs the application in development mode
    cmds:
      - wails3 dev -port {{.VITE_PORT}}

1.8 项目结构详解

运行 wails3 dev 几次后,项目目录会变成这样:

pet-content-creator/
├── main.go                    # 应用入口
├── go.mod                     # Go 模块定义
├── go.sum                     # Go 依赖校验
├── Taskfile.yml               # 构建任务定义
│
├── backend/                   # Go 后端代码
│   └── ...                    # (后续章节创建)
│
├── frontend/                  # 前端代码
│   ├── index.html             # 入口 HTML
│   ├── package.json           # npm 依赖
│   ├── vite.config.ts         # Vite 配置
│   ├── tsconfig.json          # TypeScript 配置
│   ├── src/
│   │   ├── main.tsx           # React 入口
│   │   ├── App.tsx            # 主组件
│   │   └── App.css            # 样式
│   └── bindings/              # Wails 自动生成的 TS 绑定
│       └── ...                # (后续章节自动生成)
│
└── build/                     # 构建产物
    └── ...

关键文件说明

文件 作用
main.go 应用入口,创建 Wails 实例、注册服务、创建窗口
go.mod Go 模块定义,管理后端依赖
Taskfile.yml 构建任务编排(dev / build / package)
frontend/package.json 前端 npm 依赖声明
frontend/vite.config.ts Vite 构建配置
frontend/bindings/ Wails3 自动生成的前端绑定代码,从 Go struct 自动推导 TypeScript 类型

1.9 Wails3 的核心概念

Application

app := application.New(application.Options{...})

Application 是整个桌面应用的实例。它管理:

  • 窗口(Window)— 可以创建多个
  • 服务(Service)— 后端业务逻辑
  • 菜单(Menu)— 系统菜单栏
  • 资产(Assets)— 前端静态文件

Window

app.Window.NewWithOptions(application.WebviewWindowOptions{
    Title:  "我的应用",
    Width:  1200,
    Height: 800,
    URL:    "/",           // 加载前端入口
})

Window 是一个 WebView 窗口,加载 / 路径下 embed.FS 中的前端文件。

Services

app := application.New(application.Options{
    Services: []application.Service{
        application.NewService(myService),
    },
})

Service 是 Wails3 中最核心的概念之一。任何注册为 Service 的 Go struct,其公开方法会自动暴露给前端调用。这就是前后端的桥接机制。

📌 关键概念: Wails3 的 Service 模式替代了 v2 中的 Bind 函数。你只需要注册一个 Go struct,前端就能直接调用它的方法,无需手写任何 IPC 代码。


1.10 Vite 配置

frontend/vite.config.ts 是 Vite 的配置文件:

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";

export default defineConfig({
  plugins: [react()],
});

这里只需要启用 React 插件即可。Wails3 在开发模式下会自动处理与 Go 后端的通信。


1.11 验证:修改代码看效果

实验 1:改窗口标题

main.go 中修改 Window 的 Title:

app.Window.NewWithOptions(application.WebviewWindowOptions{
    Title:  "🐾 我的第一个 Wails3 应用",  // 改这里
    Width:  1200,
    Height: 800,
    URL:    "/",
})

保存后,Wails3 会自动重新编译 Go 代码并重启窗口,你会看到新标题。

实验 2:改前端文字

frontend/src/App.tsx 中修改:

<h1>🐾 今日头条宠物内容创作工具 v1.0</h1>

保存后,浏览器会通过 Vite HMR 立即更新,无需重启应用。

💡 知识点: 前端修改走 HMR(秒级热更新),Go 后端修改走重编译(3-5 秒重启)。这是 Wails3 开发体验的核心优势。


本章总结

你已经学会 对应能力
安装 Go + Node.js + Wails3 CLI 开发环境就绪
main.go 写 Wails3 入口 创建桌面窗口
wails3 dev 启动开发模式 热重载开发
Wails3 项目结构 知道每个文件的作用
Application / Window / Service 理解 Wails3 核心抽象

🔧 动手练习

  1. 将窗口尺寸改为 1024×768,观察变化
  2. App.tsx 中加一张本地图片,观察是否能显示
  3. 尝试添加第二个 Window(提示:再调用一次 app.Window.NewWithOptions
  4. 阅读 go.sum 文件,看看有哪些间接依赖

👉 下一章:配置管理与 Go 服务架构

如有疑问关注公众号给我留言
wx

关注公众号

©2017-2023 鲁ICP备17023316号-1 Powered by Hugo