参与贡献

编辑此文档

翻译文档,或在您的计算机上打开完整项目。

在您选择提交工作成果之前,不会发布任何内容。

使用其他前端框架

如何通过将自己的 Vite 项目放入 frontend 目录,使用没有内置模板的框架

Wails 特意只为少数几种框架提供了内置入门模板:

模板 语言
vanilla TypeScript(默认)
vanilla-js JavaScript
react TypeScript
react-js JavaScript
vue TypeScript
svelte TypeScript

但这并不意味着你只能使用这些选项。Wails 应用的前端只是一个 Web 项目——任何能够构建为静态 HTML/CSS/JS 的项目都可以使用。如果你选择的框架(Solid、Preact、Lit、Qwik、SvelteKit、Angular……)没有模板,只需几分钟即可自行搭建。

frontend/目录的用途

Wails 不关心frontend/中使用哪种框架。它只依赖一套简单且与框架无关的约定:

  • frontend/dist/是最终随应用分发的内容。main.go使用//go:embed all:frontend/dist嵌入构建后的前端,并通过资源服务器提供这些内容。构建必须将静态包输出到frontend/dist/(Vite 的默认输出目录)。

  • 构建由frontend/package.json驱动。执行wails3 build时,Wails 会运行前端的build脚本;执行wails3 dev时,它会运行dev并代理 Vite 开发服务器,以支持热重载。

  • 绑定会生成到frontend/bindings/中。Wails 会检查已注册的 Go 服务,并在该目录中写入类型安全的 SDK。你可以像导入其他模块一样导入它:

    js
    import { GreetService } from "./bindings/changeme";
  • 开发服务器在固定端口上运行。wails3 dev会在WAILS_VITE_PORT指定的端口(默认为9245)上代理 Vite,因此请将server.port设为该端口,同时设置strictPort: true。这只是普通的 Vite 配置,不涉及 Wails 插件。

  • 可选——带类型的自定义事件。内置模板还会注册@wailsio/runtime/plugins/vite插件。仅当你使用带类型的自定义事件时才需要它:该插件会将生成的事件类型定义注入运行时,并使构建在绑定生成之前失败。如果你只使用基于字符串的Events.On("time", …) API,可以不添加该插件。

其他一切——组件、路由、状态和样式——完全由你所用的框架决定。

使用 Vite 搭建任意框架

最快的方法是从内置模板开始(这样可以获得main.go、Taskfile、构建资源以及可正常工作的 Go 服务),然后用适用于所选框架的新 Vite 项目替换frontend/。

1

使用默认模板创建项目

bash
wails3 init -n myapp
cd myapp
2

将`frontend/`替换为适用于所选框架的 Vite 应用

Vite 可以用一条命令搭建大多数框架。请选择一个模板:

bash
# From the project root — e.g. Solid, Preact, Lit, Svelte, Vue, React, Vanilla
rm -rf frontend
npm create vite@latest frontend -- --template solid

可以将solid替换为任意 Vite 模板:preact、lit、svelte、vue、react、vanilla,或者它们的-ts变体(solid-ts、preact-ts……)。

3

安装运行时并让 Vite 指向 Wails 开发服务器

bash
cd frontend
npm install @wailsio/runtime

@wailsio/runtime提供 JS API(Events、Browser、对话框等)。唯一必需的vite.config更改是开发服务器端口,这样wails3 dev才能找到它:

frontend/vite.config.ts
ts
import { defineConfig } from "vite";

export default defineConfig({
  server: {
    host: "127.0.0.1",
    port: Number(process.env.WAILS_VITE_PORT) || 9245,
    strictPort: true,
  },
});

仅当你打算使用带类型的自定义事件时,才需要另外添加该插件——它会注入生成的事件类型,并要求在构建前已存在绑定:

frontend/vite.config.ts
ts
import { defineConfig } from "vite";
import wails from "@wailsio/runtime/plugins/vite";

export default defineConfig({
  plugins: [wails("./bindings")],
  server: { host: "127.0.0.1", port: Number(process.env.WAILS_VITE_PORT) || 9245, strictPort: true },
});
4

调用 Go 服务

先生成一次绑定,然后就可以在组件中的任意位置导入它们:

bash
wails3 generate bindings
js
import { GreetService } from "./bindings/changeme";

const greeting = await GreetService.Greet("World");
5

运行项目

bash
wails3 dev

拥有自有脚手架的框架

少数框架不通过 Vite 的create模板创建,而是使用自己的工具。它们仍然可以正常使用——只需用框架原生的命令搭建项目,然后添加 Wails 插件:

  • SvelteKit:npx sv create frontend。使用静态适配器(@sveltejs/adapter-static),使其构建为静态包,并禁用 SSR。
  • Qwik:npm create qwik@latest。使用静态(SSG)适配器。
  • Angular:使用ng new搭建项目,将outputPath设为dist,并让构建脚本指向ng build。

规则始终相同:在frontend/dist/中生成静态构建产物,保留@wailsio/runtime Vite 插件(或直接导入运行时),并从frontend/bindings/导入 Go 绑定。

编辑页面

最后更新: