Files
reference/docs/wails.html
jaywcjlove e53d80d352 feat: add wails.md cheat sheet doc (#973)
* docs: add wails.md introduction doc

* Update wails.md

* docs: update documentation 47cf42deff
2025-06-16 10:58:20 +00:00

622 lines
53 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" data-color-mode="dark">
<head>
<meta charset="utf-8">
<title>Wails V2 备忘清单
&#x26; wails cheatsheet &#x26; Quick Reference</title>
<meta content="width=device-width, initial-scale=1" name="viewport">
<meta description="Wails V2Wails 是一个利用 Golang 和 现代 Web 技术(如 Vue、React构建跨平台桌面应用的开源框架作为 Go 的快并且轻量的 Electron 替代品
下面是 Wails V2 的快速参考列表包含常用命令和示例Wails V3 仍处于开发测试阶段),为开发人员分享快速参考备忘单。">
<meta keywords="wails,reference,Quick,Reference,cheatsheet,cheat,sheet">
<meta name="author" content="jaywcjlove">
<meta name="license" content="MIT">
<meta name="funding" content="https://jaywcjlove.github.io/#/sponsor">
<meta rel="apple-touch-icon" href="../icons/touch-icon-iphone.png">
<meta rel="apple-touch-icon" sizes="152x152" href="../icons/touch-icon-ipad.png">
<meta rel="apple-touch-icon" sizes="180x180" href="../icons/touch-icon-iphone.png">
<meta rel="apple-touch-icon" sizes="167x167" href="../icons/touch-icon-ipad-retina.png">
<meta rel="apple-touch-icon" sizes="120x120" href="../icons/touch-icon-iphone-retina.png">
<link rel="icon" href="../icons/favicon.svg" type="image/svg+xml">
<link href="../style/style.css" rel="stylesheet">
<link href="../style/katex.css" rel="stylesheet">
</head>
<body><nav class="header-nav"><div class="max-container"><a href="../index.html" class="logo"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em">
<path d="m21.66 10.44-.98 4.18c-.84 3.61-2.5 5.07-5.62 4.77-.5-.04-1.04-.13-1.62-.27l-1.68-.4c-4.17-.99-5.46-3.05-4.48-7.23l.98-4.19c.2-.85.44-1.59.74-2.2 1.17-2.42 3.16-3.07 6.5-2.28l1.67.39c4.19.98 5.47 3.05 4.49 7.23Z" fill="#c9d1d9"></path>
<path d="M15.06 19.39c-.62.42-1.4.77-2.35 1.08l-1.58.52c-3.97 1.28-6.06.21-7.35-3.76L2.5 13.28c-1.28-3.97-.22-6.07 3.75-7.35l1.58-.52c.41-.13.8-.24 1.17-.31-.3.61-.54 1.35-.74 2.2l-.98 4.19c-.98 4.18.31 6.24 4.48 7.23l1.68.4c.58.14 1.12.23 1.62.27Zm2.43-8.88c-.06 0-.12-.01-.19-.02l-4.85-1.23a.75.75 0 0 1 .37-1.45l4.85 1.23a.748.748 0 0 1-.18 1.47Z" fill="#228e6c"></path>
<path d="M14.56 13.89c-.06 0-.12-.01-.19-.02l-2.91-.74a.75.75 0 0 1 .37-1.45l2.91.74c.4.1.64.51.54.91-.08.34-.38.56-.72.56Z" fill="#228e6c"></path>
</svg>
<span class="title">Quick Reference</span></a><div class="menu"><a href="javascript:void(0);" class="searchbtn" id="searchbtn"><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
<path fill="currentColor" d="M17.71,16.29 L14.31,12.9 C15.4069846,11.5024547 16.0022094,9.77665502 16,8 C16,3.581722 12.418278,0 8,0 C3.581722,0 0,3.581722 0,8 C0,12.418278 3.581722,16 8,16 C9.77665502,16.0022094 11.5024547,15.4069846 12.9,14.31 L16.29,17.71 C16.4777666,17.8993127 16.7333625,18.0057983 17,18.0057983 C17.2666375,18.0057983 17.5222334,17.8993127 17.71,17.71 C17.8993127,17.5222334 18.0057983,17.2666375 18.0057983,17 C18.0057983,16.7333625 17.8993127,16.4777666 17.71,16.29 Z M2,8 C2,4.6862915 4.6862915,2 8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 Z"></path>
</svg><span>搜索</span><span>⌘K</span></a><a href="https://github.com/jaywcjlove/reference/blob/main/docs/wails.md" class="edit" target="__blank"><svg viewBox="0 0 36 36" fill="currentColor" height="1em" width="1em"><path d="m33 6.4-3.7-3.7a1.71 1.71 0 0 0-2.36 0L23.65 6H6a2 2 0 0 0-2 2v22a2 2 0 0 0 2 2h22a2 2 0 0 0 2-2V11.76l3-3a1.67 1.67 0 0 0 0-2.36ZM18.83 20.13l-4.19.93 1-4.15 9.55-9.57 3.23 3.23ZM29.5 9.43 26.27 6.2l1.85-1.85 3.23 3.23Z"></path><path fill="none" d="M0 0h36v36H0z"></path></svg><span>编辑</span></a><button id="darkMode" type="button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="light" height="1em" width="1em">
<path d="M6.995 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007-2.246-5.007-5.007-5.007S6.995 9.239 6.995 12zM11 19h2v3h-2zm0-17h2v3h-2zm-9 9h3v2H2zm17 0h3v2h-3zM5.637 19.778l-1.414-1.414 2.121-2.121 1.414 1.414zM16.242 6.344l2.122-2.122 1.414 1.414-2.122 2.122zM6.344 7.759 4.223 5.637l1.415-1.414 2.12 2.122zm13.434 10.605-1.414 1.414-2.122-2.122 1.414-1.414z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" class="dark" height="1em" width="1em">
<path d="M12 11.807A9.002 9.002 0 0 1 10.049 2a9.942 9.942 0 0 0-5.12 2.735c-3.905 3.905-3.905 10.237 0 14.142 3.906 3.906 10.237 3.905 14.143 0a9.946 9.946 0 0 0 2.735-5.119A9.003 9.003 0 0 1 12 11.807z"></path>
</svg>
</button><script src="../js/dark.js?v=1.8.3"></script><a href="https://github.com/jaywcjlove/reference" class="" target="__blank"><svg viewBox="0 0 16 16" fill="currentColor" height="1em" width="1em"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg></a></div></div></nav><div class="wrap h1body-exist max-container"><header class="wrap-header h1wrap"><h1 id="wails-v2-备忘清单"><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em">
<path d="M107.946667 838.4l57.173333 23.893333v-385.28l-103.68 250.026667c-17.493333 43.52 3.413333 93.44 46.506667 111.36z m832-157.866667L728.32 169.813333a85.888 85.888 0 0 0-77.226667-52.48c-11.093333 0-22.613333 1.706667-33.706666 6.4L302.933333 253.866667a85.290667 85.290667 0 0 0-46.08 110.933333l211.626667 510.72a85.248 85.248 0 0 0 110.933333 46.08l314.026667-130.133333a85.077333 85.077333 0 0 0 46.506667-110.933334zM336.213333 373.333333c-23.466667 0-42.666667-19.2-42.666666-42.666666s19.2-42.666667 42.666666-42.666667 42.666667 19.2 42.666667 42.666667-19.2 42.666667-42.666667 42.666666z m-85.333333 469.333334c0 46.933333 38.4 85.333333 85.333333 85.333333h61.866667l-147.2-355.84v270.506667z"></path>
</svg><a aria-hidden="true" tabindex="-1" href="#wails-v2-备忘清单"><span class="icon icon-link"></span></a>Wails V2 备忘清单</h1><div class="wrap-body">
<p><a href="https://github.com/wailsapp/wails"><img src="https://img.shields.io/github/stars/wailsapp/wails?style=flat" alt="GitHub Repo stars"></a> <a href="https://github.com/wailsapp/wails/releases/latest"><img src="https://img.shields.io/github/v/release/wailsapp/wails?style=flat" alt="GitHub release (latest by date)"></a> <a href="https://pkg.go.dev/github.com/wailsapp/wails/v2"><img src="https://pkg.go.dev/badge/github.com/wailsapp/wails/v2.svg" alt="Go Reference"></a></p>
<p>Wails 是一个利用 Golang 和 现代 Web 技术(如 Vue、React构建跨平台桌面应用的开源框架作为 Go 的快并且轻量的 Electron 替代品</p>
<p style="padding-top: 12px;">下面是 Wails V2 的快速参考列表包含常用命令和示例Wails V3 仍处于开发测试阶段)</p>
<!--rehype:style=padding-top: 12px;-->
</div></header><div class="menu-tocs"><div class="menu-btn"><svg aria-hidden="true" fill="currentColor" height="1em" width="1em" viewBox="0 0 16 16" version="1.1" data-view-component="true">
<path fill-rule="evenodd" d="M2 4a1 1 0 100-2 1 1 0 000 2zm3.75-1.5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zM3 8a1 1 0 11-2 0 1 1 0 012 0zm-1 6a1 1 0 100-2 1 1 0 000 2z"></path>
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#命令行工具-cli">命令行工具 (CLI)</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#安装与更新">安装与更新</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#项目命令">项目命令</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#常用命令参数">常用命令参数</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#项目配置">项目配置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#项目结构">项目结构</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#wailsjson-详解">wails.json 详解</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#核心交互与生命周期">核心交互与生命周期</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#方法绑定-go---js">方法绑定 (Go &#x3C;-> JS)</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#事件系统-events">事件系统 (Events)</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#go-端-runtimeevents">Go 端 (runtime.Events*)</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#javascript-端-runtimeevents">JavaScript 端 (runtime.Events*)</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#应用生命周期钩子">应用生命周期钩子</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#运行时-api-runtime">运行时 API (Runtime)</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#窗口-window">窗口 (Window)</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#对话框-dialog">对话框 (Dialog)</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#go-端">Go 端</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#javascript-端">JavaScript 端</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#菜单-menu">菜单 (Menu)</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#其他-runtime-api">其他 Runtime API</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#应用打包与分发">应用打包与分发</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#windows-打包">Windows 打包</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#macos-打包">macOS 打包</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#linux-打包">Linux 打包</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#进阶主题与杂项">进阶主题与杂项</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#平台特定构建选项">平台特定构建选项</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#使用-typescript">使用 TypeScript</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#调试">调试</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#参考资料">参考资料</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="命令行工具-cli"><a aria-hidden="true" tabindex="-1" href="#命令行工具-cli"><span class="icon icon-link"></span></a>命令行工具 (CLI)</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="安装与更新"><a aria-hidden="true" tabindex="-1" href="#安装与更新"><span class="icon icon-link"></span></a>安装与更新</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line"><span class="token comment"># 安装 Wails CLI</span>
</span><span class="code-line">$ go <span class="token function">install</span> github.com/wailsapp/wails/v2/cmd/wails@latest
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 更新到最新稳定版</span>
</span><span class="code-line">$ wails update
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 更新到最新预发布版</span>
</span><span class="code-line">$ wails update <span class="token parameter variable">-pre</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="项目命令"><a aria-hidden="true" tabindex="-1" href="#项目命令"><span class="icon icon-link"></span></a>项目命令</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line"><span class="token comment"># 初始化新项目 (以 Vue 模板为例)</span>
</span><span class="code-line">$ wails init <span class="token parameter variable">-n</span> my-project <span class="token parameter variable">-t</span> vue
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 进入项目目录并启动实时开发</span>
</span><span class="code-line">$ <span class="token builtin class-name">cd</span> my-project
</span><span class="code-line">$ wails dev
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 构建生产版本 (以 Windows 平台为例)</span>
</span><span class="code-line">$ wails build <span class="token parameter variable">-platform</span> windows/amd64 <span class="token parameter variable">-clean</span> <span class="token parameter variable">-upx</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 检查环境依赖</span>
</span><span class="code-line">$ wails doctor
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="常用命令参数"><a aria-hidden="true" tabindex="-1" href="#常用命令参数"><span class="icon icon-link"></span></a>常用命令参数</h3><div class="wrap-body">
<table class="wrap-text "><thead><tr><th>命令</th><th>参数</th><th>描述</th></tr></thead><tbody><tr><td><code>init</code></td><td><code>-n</code></td><td><strong>项目名称 (必填)</strong></td></tr><tr><td></td><td><code>-t</code></td><td>模板名称 (<code>vue</code>, <code>react</code>) 或模板 URL</td></tr><tr><td></td><td><code>-ide</code></td><td><code>vscode</code><code>goland</code> 生成 IDE 配置</td></tr><tr><td><code>dev</code></td><td><code>-browser</code></td><td>在浏览器中打开前端界面进行调试</td></tr><tr><td></td><td><code>-assetdir</code></td><td>指定前端资产目录的路径</td></tr><tr><td></td><td><code>-frontenddevserverurl</code></td><td>使用外部前端开发服务器的 URL</td></tr><tr><td></td><td><code>-wailsjsdir</code></td><td>指定生成的 Wails JS 模块目录</td></tr><tr><td><code>build</code></td><td><code>-platform</code></td><td>交叉编译目标平台, 如 <code>darwin/arm64</code></td></tr><tr><td></td><td><code>-clean</code></td><td>构建前清理 <code>build/bin</code> 目录</td></tr><tr><td></td><td><code>-upx</code></td><td>使用 UPX 压缩最终的二进制文件</td></tr><tr><td></td><td><code>-nsis</code></td><td>(Windows) 生成 NSIS 安装程序</td></tr><tr><td></td><td><code>-webview2</code></td><td>(Windows) WebView2 依赖处理策略 (<code>download</code>, <code>embed</code>, <code>browser</code>)</td></tr><tr><td></td><td><code>-debug</code></td><td>保留调试信息</td></tr><tr><td></td><td><code>-devtools</code></td><td>在生产版本中启用开发者工具</td></tr></tbody></table>
<!--rehype:className=wrap-text -->
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="项目配置"><a aria-hidden="true" tabindex="-1" href="#项目配置"><span class="icon icon-link"></span></a>项目配置</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="项目结构"><a aria-hidden="true" tabindex="-1" href="#项目结构"><span class="icon icon-link"></span></a>项目结构</h3><div class="wrap-body">
<pre><code class="code-highlight"><span class="code-line">my-project/
</span><span class="code-line">├── build/ # 构建输出目录
</span><span class="code-line">├── frontend/ # 前端源文件
</span><span class="code-line">│ └── wailsjs/ # Wails 自动生成的模块
</span><span class="code-line">├── app.go # 应用核心逻辑
</span><span class="code-line">├── main.go # 应用入口
</span><span class="code-line">├── go.mod
</span><span class="code-line">└── wails.json # 项目配置文件
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="wailsjson-详解"><a aria-hidden="true" tabindex="-1" href="#wailsjson-详解"><span class="icon icon-link"></span></a><code>wails.json</code> 详解</h3><div class="wrap-body">
<table class="wrap-text "><thead><tr><th>配置项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>name</code></td><td>项目名称</td><td><code>"my-app"</code></td></tr><tr><td><code>outputfilename</code></td><td>输出的二进制文件名</td><td><code>"my-app.exe"</code></td></tr><tr><td><code>frontend:install</code></td><td>前端依赖安装命令</td><td><code>"npm install"</code></td></tr><tr><td><code>frontend:build</code></td><td>前端构建命令</td><td><code>"npm run build"</code></td></tr><tr><td><code>frontend:dev:watcher</code></td><td>开发模式下运行的前端监视命令</td><td><code>"npm run dev"</code></td></tr><tr><td><code>wailsjsdir</code></td><td>生成 JS 模块的目录</td><td><code>"./frontend/wailsjs"</code></td></tr><tr><td><code>author.name</code></td><td>作者名称,用于打包元数据</td><td><code>"Your Name"</code></td></tr><tr><td><code>info</code></td><td>(macOS) 用于 <code>Info.plist</code> 的元数据</td><td><code>{"CFBundleName": "MyApp"}</code></td></tr></tbody></table>
<!--rehype:className=wrap-text -->
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="核心交互与生命周期"><a aria-hidden="true" tabindex="-1" href="#核心交互与生命周期"><span class="icon icon-link"></span></a>核心交互与生命周期</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="方法绑定-go---js"><a aria-hidden="true" tabindex="-1" href="#方法绑定-go---js"><span class="icon icon-link"></span></a>方法绑定 (Go &#x3C;-> JS)</h3><div class="wrap-body">
<p>在 Go 中定义公共方法,即可在前端直接调用。</p>
<pre class="language-go"><code class="language-go code-highlight"><span class="code-line"><span class="token comment">// app.go</span>
</span><span class="code-line"><span class="token keyword">type</span> App <span class="token keyword">struct</span> <span class="token punctuation">{</span>
</span><span class="code-line"> ctx context<span class="token punctuation">.</span>Context
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token keyword">func</span> <span class="token punctuation">(</span>a <span class="token operator">*</span>App<span class="token punctuation">)</span> <span class="token function">Greet</span><span class="token punctuation">(</span>name <span class="token builtin">string</span><span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token keyword">return</span> fmt<span class="token punctuation">.</span><span class="token function">Sprintf</span><span class="token punctuation">(</span><span class="token string">"Hello %s!"</span><span class="token punctuation">,</span> name<span class="token punctuation">)</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment">// main.go</span>
</span><span class="code-line">app <span class="token operator">:=</span> <span class="token function">NewApp</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span><span class="code-line">err <span class="token operator">:=</span> wails<span class="token punctuation">.</span><span class="token function">Run</span><span class="token punctuation">(</span><span class="token operator">&#x26;</span>options<span class="token punctuation">.</span>App<span class="token punctuation">{</span>
</span><span class="code-line"> Title<span class="token punctuation">:</span> <span class="token string">"My App"</span><span class="token punctuation">,</span>
</span><span class="code-line"> Bind<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">{</span>
</span><span class="code-line"> app<span class="token punctuation">,</span> <span class="token comment">// 暴露 app 实例的所有公共方法</span>
</span><span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span>
</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line"><span class="token comment">// frontend/main.js</span>
</span><span class="code-line"><span class="token keyword module">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">Greet</span> <span class="token punctuation">}</span></span> <span class="token keyword module">from</span> <span class="token string">'../wailsjs/go/main/App'</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token function"><span class="token maybe-class-name">Greet</span></span><span class="token punctuation">(</span><span class="token string">"World"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">then</span><span class="token punctuation">(</span><span class="token parameter">result</span> <span class="token arrow operator">=></span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-exist"><div class="wrap-header h3wrap"><h3 id="事件系统-events"><a aria-hidden="true" tabindex="-1" href="#事件系统-events"><span class="icon icon-link"></span></a>事件系统 (Events)</h3><div class="wrap-body">
<p>用于在 Go 和前端之间异步发送和监听消息。</p>
<h4 id="go-端-runtimeevents"><a aria-hidden="true" tabindex="-1" href="#go-端-runtimeevents"><span class="icon icon-link"></span></a>Go 端 (<code>runtime.Events*</code>)</h4>
<pre class="language-go"><code class="language-go code-highlight"><span class="code-line"><span class="token keyword">import</span> <span class="token string">"github.com/wailsapp/wails/v2/pkg/runtime"</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment">// 发送事件到前端</span>
</span><span class="code-line">runtime<span class="token punctuation">.</span><span class="token function">EventsEmit</span><span class="token punctuation">(</span>app<span class="token punctuation">.</span>ctx<span class="token punctuation">,</span> <span class="token string">"go-event"</span><span class="token punctuation">,</span> <span class="token string">"data from Go"</span><span class="token punctuation">)</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment">// 监听来自前端的事件</span>
</span><span class="code-line">runtime<span class="token punctuation">.</span><span class="token function">EventsOn</span><span class="token punctuation">(</span>app<span class="token punctuation">.</span>ctx<span class="token punctuation">,</span> <span class="token string">"js-event"</span><span class="token punctuation">,</span> <span class="token keyword">func</span><span class="token punctuation">(</span>optionalData <span class="token operator">...</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment">// ... 处理数据</span>
</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
<h4 id="javascript-端-runtimeevents"><a aria-hidden="true" tabindex="-1" href="#javascript-端-runtimeevents"><span class="icon icon-link"></span></a>JavaScript 端 (<code>runtime.Events*</code>)</h4>
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line"><span class="token keyword module">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">EventsOn</span><span class="token punctuation">,</span> <span class="token maybe-class-name">EventsEmit</span> <span class="token punctuation">}</span></span> <span class="token keyword module">from</span> <span class="token string">'../wailsjs/runtime'</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment">// 发送事件到 Go</span>
</span><span class="code-line"><span class="token function"><span class="token maybe-class-name">EventsEmit</span></span><span class="token punctuation">(</span><span class="token string">"js-event"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string-property property">"payload"</span><span class="token operator">:</span> <span class="token number">123</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment">// 监听来自 Go 的事件</span>
</span><span class="code-line"><span class="token function"><span class="token maybe-class-name">EventsOn</span></span><span class="token punctuation">(</span><span class="token string">"go-event"</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">data</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token string">"Received data from Go:"</span><span class="token punctuation">,</span> data<span class="token punctuation">)</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="应用生命周期钩子"><a aria-hidden="true" tabindex="-1" href="#应用生命周期钩子"><span class="icon icon-link"></span></a>应用生命周期钩子</h3><div class="wrap-body">
<p><code>wails.Run()</code> 中定义,用于在应用关键节点执行 Go 代码。</p>
<pre class="language-go"><code class="language-go code-highlight"><span class="code-line"><span class="token comment">// main.go</span>
</span><span class="code-line">err <span class="token operator">:=</span> wails<span class="token punctuation">.</span><span class="token function">Run</span><span class="token punctuation">(</span><span class="token operator">&#x26;</span>options<span class="token punctuation">.</span>App<span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment">// ...</span>
</span><span class="code-line"> OnStartup<span class="token punctuation">:</span> app<span class="token punctuation">.</span>startup<span class="token punctuation">,</span>
</span><span class="code-line"> OnDomReady<span class="token punctuation">:</span> app<span class="token punctuation">.</span>domReady<span class="token punctuation">,</span>
</span><span class="code-line"> OnShutdown<span class="token punctuation">:</span> app<span class="token punctuation">.</span>shutdown<span class="token punctuation">,</span>
</span><span class="code-line"> OnBeforeClose<span class="token punctuation">:</span> app<span class="token punctuation">.</span>beforeClose<span class="token punctuation">,</span> <span class="token comment">// 返回 bool 值决定是否关闭</span>
</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
<table class="wrap-text "><thead><tr><th>钩子</th><th>描述</th></tr></thead><tbody><tr><td><code>OnStartup</code></td><td>应用启动时,在窗口创建前调用</td></tr><tr><td><code>OnDomReady</code></td><td>前端 DOM 加载完成后调用</td></tr><tr><td><code>OnShutdown</code></td><td>应用关闭前,在窗口销毁后调用</td></tr><tr><td><code>OnBeforeClose</code></td><td>用户关闭窗口时调用,返回 <code>true</code> 可阻止关闭</td></tr></tbody></table>
<!--rehype:className=wrap-text -->
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="运行时-api-runtime"><a aria-hidden="true" tabindex="-1" href="#运行时-api-runtime"><span class="icon icon-link"></span></a>运行时 API (Runtime)</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="窗口-window"><a aria-hidden="true" tabindex="-1" href="#窗口-window"><span class="icon icon-link"></span></a>窗口 (Window)</h3><div class="wrap-body">
<table class="wrap-text "><thead><tr><th>功能</th><th>Go 示例 (<code>runtime.*</code>)</th><th>JS 示例 (<code>runtime.*</code>)</th></tr></thead><tbody><tr><td><strong>设置标题</strong></td><td><code>WindowSetTitle(ctx, "New")</code></td><td><code>WindowSetTitle("New")</code></td></tr><tr><td><strong>设置尺寸</strong></td><td><code>WindowSetSize(ctx, 800, 600)</code></td><td><code>WindowSetSize(800, 600)</code></td></tr><tr><td><strong>设置最小/最大尺寸</strong></td><td><code>WindowSetMinSize(ctx, 400, 300)</code></td><td><code>WindowSetMinSize(400, 300)</code></td></tr><tr><td><strong>居中</strong></td><td><code>WindowCenter(ctx)</code></td><td><code>WindowCenter()</code></td></tr><tr><td><strong>全屏/取消全屏</strong></td><td><code>WindowFullscreen(ctx)</code></td><td><code>WindowFullscreen()</code></td></tr><tr><td><strong>显示/隐藏</strong></td><td><code>WindowShow(ctx)</code> / <code>WindowHide(ctx)</code></td><td><code>WindowShow()</code> / <code>WindowHide()</code></td></tr><tr><td><strong>设为置顶</strong></td><td><code>WindowSetAlwaysOnTop(ctx, true)</code></td><td><code>WindowSetAlwaysOnTop(true)</code></td></tr><tr><td><strong>拖动窗口</strong></td><td>(仅 JS)</td><td>在 HTML 元素上设置 <code>style="--wails-draggable:drag"</code></td></tr></tbody></table>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap h3body-exist"><div class="wrap-header h3wrap"><h3 id="对话框-dialog"><a aria-hidden="true" tabindex="-1" href="#对话框-dialog"><span class="icon icon-link"></span></a>对话框 (Dialog)</h3><div class="wrap-body">
<h4 id="go-端"><a aria-hidden="true" tabindex="-1" href="#go-端"><span class="icon icon-link"></span></a>Go 端</h4>
<pre class="language-go"><code class="language-go code-highlight"><span class="code-line">dialogOpts <span class="token operator">:=</span> <span class="token operator">&#x26;</span>runtime<span class="token punctuation">.</span>OpenDialogOptions<span class="token punctuation">{</span> Title<span class="token punctuation">:</span> <span class="token string">"Select File"</span> <span class="token punctuation">}</span>
</span><span class="code-line">filePath<span class="token punctuation">,</span> err <span class="token operator">:=</span> runtime<span class="token punctuation">.</span><span class="token function">OpenFileDialog</span><span class="token punctuation">(</span>app<span class="token punctuation">.</span>ctx<span class="token punctuation">,</span> <span class="token operator">*</span>dialogOpts<span class="token punctuation">)</span>
</span></code></pre>
<table><thead><tr><th>对话框类型</th><th>Go 方法 (<code>runtime.*</code>)</th></tr></thead><tbody><tr><td><strong>信息框</strong></td><td><code>MessageDialog(ctx, runtime.MessageDialogOptions{...})</code></td></tr><tr><td><strong>打开文件</strong></td><td><code>OpenFileDialog(ctx, runtime.OpenDialogOptions{...})</code></td></tr><tr><td><strong>保存文件</strong></td><td><code>SaveFileDialog(ctx, runtime.SaveDialogOptions{...})</code></td></tr><tr><td><strong>打开目录</strong></td><td><code>OpenDirectoryDialog(ctx, runtime.OpenDialogOptions{...})</code></td></tr></tbody></table>
<h4 id="javascript-端"><a aria-hidden="true" tabindex="-1" href="#javascript-端"><span class="icon icon-link"></span></a>JavaScript 端</h4>
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line"><span class="token keyword module">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">OpenFileDialog</span> <span class="token punctuation">}</span></span> <span class="token keyword module">from</span> <span class="token string">'../wailsjs/runtime'</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">selectFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token keyword">const</span> filePath <span class="token operator">=</span> <span class="token keyword control-flow">await</span> <span class="token function"><span class="token maybe-class-name">OpenFileDialog</span></span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">title</span><span class="token operator">:</span> <span class="token string">"Select File"</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="菜单-menu"><a aria-hidden="true" tabindex="-1" href="#菜单-menu"><span class="icon icon-link"></span></a>菜单 (Menu)</h3><div class="wrap-body">
<pre class="language-go"><code class="language-go code-highlight"><span class="code-line"><span class="token comment">// main.go</span>
</span><span class="code-line">appMenu <span class="token operator">:=</span> menu<span class="token punctuation">.</span><span class="token function">NewMenu</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span><span class="code-line">fileMenu <span class="token operator">:=</span> appMenu<span class="token punctuation">.</span><span class="token function">AddSubmenu</span><span class="token punctuation">(</span><span class="token string">"File"</span><span class="token punctuation">)</span>
</span><span class="code-line">fileMenu<span class="token punctuation">.</span><span class="token function">AddText</span><span class="token punctuation">(</span><span class="token string">"Quit"</span><span class="token punctuation">,</span> keys<span class="token punctuation">.</span><span class="token function">CmdOrCtrl</span><span class="token punctuation">(</span><span class="token string">"q"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">func</span><span class="token punctuation">(</span><span class="token boolean">_</span> <span class="token operator">*</span>menu<span class="token punctuation">.</span>CallbackData<span class="token punctuation">)</span> <span class="token punctuation">{</span>
</span><span class="code-line"> runtime<span class="token punctuation">.</span><span class="token function">Quit</span><span class="token punctuation">(</span>app<span class="token punctuation">.</span>ctx<span class="token punctuation">)</span>
</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span><span class="code-line">
</span><span class="code-line">err <span class="token operator">:=</span> wails<span class="token punctuation">.</span><span class="token function">Run</span><span class="token punctuation">(</span><span class="token operator">&#x26;</span>options<span class="token punctuation">.</span>App<span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment">// ...</span>
</span><span class="code-line"> Menu<span class="token punctuation">:</span> appMenu<span class="token punctuation">,</span>
</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
<table class="wrap-text "><thead><tr><th>菜单项类型</th><th>示例</th></tr></thead><tbody><tr><td><strong>文本项</strong></td><td><code>menu.AddText("Item", accelerator, callback)</code></td></tr><tr><td><strong>复选框</strong></td><td><code>menu.AddCheckbox("Toggle", true, accelerator, callback)</code></td></tr><tr><td><strong>分隔符</strong></td><td><code>menu.AddSeparator()</code></td></tr><tr><td><strong>子菜单</strong></td><td><code>menu.AddSubmenu("Submenu")</code></td></tr></tbody></table>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="其他-runtime-api"><a aria-hidden="true" tabindex="-1" href="#其他-runtime-api"><span class="icon icon-link"></span></a>其他 Runtime API</h3><div class="wrap-body">
<table class="wrap-text "><thead><tr><th>功能</th><th>Go 示例 (<code>runtime.*</code>)</th><th>JS 示例 (<code>runtime.*</code>)</th></tr></thead><tbody><tr><td><strong>日志</strong></td><td><code>LogInfo(ctx, "Message")</code></td><td><code>LogInfo("Message")</code></td></tr><tr><td><strong>剪贴板</strong></td><td><code>ClipboardSetText(ctx, "text")</code></td><td><code>ClipboardSetText("text")</code></td></tr></tbody></table>
<!--rehype:className=wrap-text -->
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="应用打包与分发"><a aria-hidden="true" tabindex="-1" href="#应用打包与分发"><span class="icon icon-link"></span></a>应用打包与分发</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="windows-打包"><a aria-hidden="true" tabindex="-1" href="#windows-打包"><span class="icon icon-link"></span></a>Windows 打包</h3><div class="wrap-body">
<ul>
<li>
<p><strong>默认生成</strong>: <code>.exe</code> 可执行文件。</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> windows/amd64
</span></code></pre>
</li>
<li>
<p><strong>生成 NSIS 安装程序</strong>:</p>
<ul>
<li>
<p><strong>前提条件</strong>: 需要预先安装 <a href="https://nsis.sourceforge.io/Download">NSIS (Nullsoft Scriptable Install System)</a></p>
<ul>
<li>
<p><strong>下载 NSIS</strong>: 从 <a href="https://nsis.sourceforge.io/Download">NSIS 官方网站</a> 下载最新版本的 NSIS 安装程序。</p>
</li>
<li>
<p><strong>安装 NSIS</strong>: 运行安装程序并按照提示完成安装。<strong>确保</strong>在安装过程中选择将 NSIS 添加到系统的 <code>PATH</code> 环境变量中,以便 <code>makensis</code> 命令可以在命令行中全局访问。</p>
</li>
<li>
<p><strong>验证安装</strong>:</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">makensis <span class="token parameter variable">-VERSION</span>
</span></code></pre>
<p>如果安装正确,您将看到 NSIS 的版本号输出。</p>
</li>
</ul>
</li>
<li>
<p><strong>生成安装程序</strong>:</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> windows/amd64 <span class="token parameter variable">-nsis</span>
</span></code></pre>
</li>
</ul>
</li>
<li>
<p><strong>处理 WebView2 依赖</strong>:</p>
<ul>
<li>
<p><code>download</code>: 提示用户下载 WebView2。</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> windows/amd64 <span class="token parameter variable">-webview2</span> download
</span></code></pre>
</li>
<li>
<p><code>embed</code>: 将 WebView2 嵌入到应用中(推荐)。</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> windows/amd64 <span class="token parameter variable">-webview2</span> embed
</span></code></pre>
</li>
<li>
<p><code>browser</code>: 在浏览器中打开下载页面。</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> windows/amd64 <span class="token parameter variable">-webview2</span> browser
</span></code></pre>
</li>
</ul>
</li>
</ul>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="macos-打包"><a aria-hidden="true" tabindex="-1" href="#macos-打包"><span class="icon icon-link"></span></a>macOS 打包</h3><div class="wrap-body">
<ul>
<li>
<p><strong>默认生成</strong>: <code>.app</code> 应用程序包。</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> darwin/amd64
</span></code></pre>
</li>
<li>
<p><strong>代码签名与公证</strong>:</p>
<ul>
<li>需要通过 Apple 开发者账户进行 <strong>代码签名</strong><strong>公证</strong> 才能分发。</li>
</ul>
</li>
<li>
<p><strong>跳过打包成 <code>.app</code> 步骤</strong>:</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> darwin/amd64 <span class="token parameter variable">-skippackage</span>
</span></code></pre>
</li>
</ul>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="linux-打包"><a aria-hidden="true" tabindex="-1" href="#linux-打包"><span class="icon icon-link"></span></a>Linux 打包</h3><div class="wrap-body">
<ul>
<li>
<p><strong>生成可执行文件</strong>:</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> linux/amd64
</span></code></pre>
</li>
<li>
<p><strong>打包成 <code>.deb</code></strong>:</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> linux/amd64 <span class="token parameter variable">-deb</span>
</span></code></pre>
</li>
<li>
<p><strong>打包成 <code>.rpm</code></strong>:</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">wails build <span class="token parameter variable">-platform</span> linux/amd64 <span class="token parameter variable">-rpm</span>
</span></code></pre>
</li>
<li>
<p><strong>AppImage 支持</strong>:</p>
<ul>
<li>Wails 不直接内置对 AppImage 的支持,但可以使用外部工具手动创建。
<ul>
<li>
<p><strong>使用 <code>appimagetool</code></strong>:</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">appimagetool ./your-app-dir
</span></code></pre>
</li>
<li>
<p><strong>安装 <code>appimagetool</code></strong>:</p>
<ul>
<li>您可以从 <a href="https://appimage.org/">AppImage 官方网站</a> 获取 <code>appimagetool</code></li>
<li>下载后,将其添加到您的 <code>PATH</code> 中以便全局访问。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="进阶主题与杂项"><a aria-hidden="true" tabindex="-1" href="#进阶主题与杂项"><span class="icon icon-link"></span></a>进阶主题与杂项</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="平台特定构建选项"><a aria-hidden="true" tabindex="-1" href="#平台特定构建选项"><span class="icon icon-link"></span></a>平台特定构建选项</h3><div class="wrap-body">
<p><code>main.go</code><code>wails.Run()</code> 中为不同平台提供细粒度配置。</p>
<pre class="language-go"><code class="language-go code-highlight"><span class="code-line">err <span class="token operator">:=</span> wails<span class="token punctuation">.</span><span class="token function">Run</span><span class="token punctuation">(</span><span class="token operator">&#x26;</span>options<span class="token punctuation">.</span>App<span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment">// ...</span>
</span><span class="code-line"> Windows<span class="token punctuation">:</span> <span class="token operator">&#x26;</span>windows<span class="token punctuation">.</span>Options<span class="token punctuation">{</span>
</span><span class="code-line"> WebviewIsTransparent<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token comment">// WebView2 背景透明</span>
</span><span class="code-line"> WindowIsTranslucent<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token comment">// 窗口背景透明</span>
</span><span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span>
</span><span class="code-line"> Mac<span class="token punctuation">:</span> <span class="token operator">&#x26;</span>mac<span class="token punctuation">.</span>Options<span class="token punctuation">{</span>
</span><span class="code-line"> TitleBar<span class="token punctuation">:</span> <span class="token operator">&#x26;</span>mac<span class="token punctuation">.</span>TitleBar<span class="token punctuation">{</span>
</span><span class="code-line"> TitlebarAppearsTransparent<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token comment">// 透明标题栏</span>
</span><span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span>
</span><span class="code-line"> About<span class="token punctuation">:</span> <span class="token operator">&#x26;</span>mac<span class="token punctuation">.</span>AboutInfo<span class="token punctuation">{</span>
</span><span class="code-line"> Title<span class="token punctuation">:</span> <span class="token string">"My Awesome App"</span><span class="token punctuation">,</span>
</span><span class="code-line"> Message<span class="token punctuation">:</span> <span class="token string">"© 2025 Me"</span><span class="token punctuation">,</span>
</span><span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span>
</span><span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span>
</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="使用-typescript"><a aria-hidden="true" tabindex="-1" href="#使用-typescript"><span class="icon icon-link"></span></a>使用 TypeScript</h3><div class="wrap-body">
<p>Wails 会自动为 Go 绑定的方法生成 TypeScript 定义。</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line"><span class="token comment"># wails.json</span>
</span><span class="code-line"><span class="token string">"frontend:build"</span><span class="token builtin class-name">:</span> <span class="token string">"npm run build"</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># package.json</span>
</span><span class="code-line"><span class="token string">"scripts"</span><span class="token builtin class-name">:</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token string">"build"</span><span class="token builtin class-name">:</span> <span class="token string">"tsc &#x26;&#x26; vite build"</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="调试"><a aria-hidden="true" tabindex="-1" href="#调试"><span class="icon icon-link"></span></a>调试</h3><div class="wrap-body">
<ul>
<li><strong>Go 部分</strong>: 使用 <code>wails dev -debug</code> 启动并附加您的 Go 调试器。</li>
<li><strong>前端部分</strong>: 在 <code>wails dev</code> 模式下,右键点击应用,选择“检查”打开浏览器开发者工具。</li>
</ul>
</div></div></div></div></div><div class="wrap h2body-not-exist"><div class="wrap-header h2wrap"><h2 id="参考资料"><a aria-hidden="true" tabindex="-1" href="#参考资料"><span class="icon icon-link"></span></a>参考资料</h2><div class="wrap-body">
<ul>
<li><a href="https://wails.io/">Wails 官方文档</a></li>
<li><a href="https://github.com/wailsapp/wails">Wails GitHub 仓库</a></li>
<li><a href="https://discord.gg/4K6VHPkG5c">Wails Discord 社区</a></li>
</ul>
<hr>
</div></div><div class="h2wrap-body"></div></div></div><script src="https://giscus.app/client.js" data-repo="jaywcjlove/reference" data-repo-id="R_kgDOID2-Mw" data-category="Q&#x26;A" data-category-id="DIC_kwDOID2-M84CS5wo" data-mapping="pathname" data-strict="0" data-reactions-enabled="1" data-emit-metadata="0" data-input-position="bottom" data-theme="dark" data-lang="zh-CN" crossorigin="anonymous" async></script><div class="giscus"></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 <a href="https://wangchujiang.com/#/app" target="_blank">Kenny Wang</a>.</footer></footer><script src="../data.js?v=1.8.3" defer></script><script src="../js/fuse.min.js?v=1.8.3" defer></script><script src="../js/main.js?v=1.8.3" defer></script><div id="mysearch"><div class="mysearch-box"><div class="mysearch-input"><div><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
<path fill="currentColor" d="M17.71,16.29 L14.31,12.9 C15.4069846,11.5024547 16.0022094,9.77665502 16,8 C16,3.581722 12.418278,0 8,0 C3.581722,0 0,3.581722 0,8 C0,12.418278 3.581722,16 8,16 C9.77665502,16.0022094 11.5024547,15.4069846 12.9,14.31 L16.29,17.71 C16.4777666,17.8993127 16.7333625,18.0057983 17,18.0057983 C17.2666375,18.0057983 17.5222334,17.8993127 17.71,17.71 C17.8993127,17.5222334 18.0057983,17.2666375 18.0057983,17 C18.0057983,16.7333625 17.8993127,16.4777666 17.71,16.29 Z M2,8 C2,4.6862915 4.6862915,2 8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 Z"></path>
</svg><input id="mysearch-input" type="search" placeholder="搜索" autocomplete="off"><div class="mysearch-clear"></div></div><button id="mysearch-close" type="button">搜索</button></div><div class="mysearch-result"><div id="mysearch-menu"></div><div id="mysearch-content"></div></div></div></div></body>
</html>