外观
mygo CLI
mygo 用于创建、开发、打包和发布 MyGo 应用。
安装
含 Web 前端的项目把 CLI 作为 mygo-cli npm 包来依赖,该包内含为 macOS、 Linux 和 Windows(arm64 与 x64)预编译的二进制文件,并在其脚本中运行它:
sh
bun add -d mygo-cli # or: npm install -D mygo-cli
bun run dev # "dev": "mygo dev" in package.json
bunx mygo doctor # any command, in the project在项目之外,运行 bunx mygo-cli 或 npx mygo-cli,例如 bunx mygo-cli init my-app:npm 上有一个与本项目无关的名为 mygo 的包, 所以在未安装 mygo-cli 时 bunx mygo 会运行那个包。npm install -g mygo-cli 会把 mygo 放进你的 PATH。MYGO_CLI_BINARY 可以让该包运行 另一个构建的 CLI。
原生 UI 项目没有 npm 包:它们的 go.mod 把 CLI 作为一个 工具, go tool mygo 按其固定的版本运行它。
CLI 是一个 Go 程序,Go 也可以不安装直接运行它:
sh
go run github.com/egoist/mygo/cmd/mygo@latest init my-appgo install 会把 mygo 放进你的 PATH:
sh
go install github.com/egoist/mygo/cmd/mygo@latest无论哪种方式,构建应用都需要 Go 来编译它们。
接受项目目录 [dir] 的命令,默认使用当前目录。
mygo init
mygo init [flags] <dir>在一个新的或空的目录中创建项目:一个 Go 模块和一个用 Vite 构建的 TypeScript 前端,二者并列存放,resources/icon.png 中有一个默认图标, 以及带有 dev、build 和 generate 脚本的 package.json。它用 Bun 安装 依赖并生成 TypeScript 客户端。见 Web 前端。
使用 -template native 时,项目只是一个 Go 模块,其窗口显示 原生 UI:main.go、其视图的测试、mygo.json 和图标。该 模块把 CLI 作为一个 工具,因此 go tool mygo dev 和 go tool mygo build 按其固定的版本运行,无需 Bun。 见原生 UI。
两种模板都在 .agents/skills/mygo-maintenance/ 中包含 mygo-maintenance 智能体技能,提供维护应用时关于元素生命周期、稳定标识、线程和测试的指导。
| 标志 | |
|---|---|
-template | web:TypeScript 前端(默认);native:用 Go 编写的原生 UI |
-name | 应用名称(默认:目录名) |
-module | Go 模块路径(默认:目录名) |
-mygo | 要使用的 MyGo 检出,通过 replace 指令代替已发布的模块;脚本随后用 go run 运行该检出的 CLI;对于 web 模板,请先在检出中运行 bun install && bun run build |
mygo install-skills
sh
mygo install-skills [dir]把你所运行的 CLI 版本附带的智能体技能安装或更新到现有项目的 .agents/skills/ 中。目录默认为当前目录;不需要项目配置、Go 构建或前端 工具。新项目也会通过 mygo init 获得这些技能。
该命令会覆盖随附的文件,例如 mygo-maintenance/SKILL.md 和 mygo-maintenance/agents/openai.yaml,包括对这些文件的本地修改。其他技能 和额外的自定义文件会被保留。升级 CLI 后再次运行该命令,即可刷新其指导。
mygo dev
mygo dev [flags] [dir]以热重载方式开发应用。它写入 TypeScript 客户端,运行配置中的 devCommand (例如 Vite 开发服务器),等待 devUrl 响应,然后构建一个开发版应用——它 加载 devUrl 而不是构建好的前端——并启动它。没有 devUrl 时,应用直接从 磁盘提供 frontendDist。
对 Go 代码、配置、图标、资源或目录的修改会重新构建应用,重新 生成 TypeScript 客户端和目录函数,并重启应用:正在运行的构建先退出,然后 新的构建启动,因此两者绝不会同时持有相同的文件、锁或 web view 配置。编译 失败的构建会保留正在运行的那个。前端的改动由开发服务器处理。退出应用或按 Ctrl+C 会结束 mygo dev(再按一次 Ctrl+C 则不等待应用退出),App.Relaunch 会重启应用。
在终端中,每一步都会显示一个说明其内容的转圈动画,例如正在编译的 Go 包, 随后显示耗时;开发服务器和应用打印的内容分别标注 web │ 和 app │,重建 时会列出发生变化的文件。像 Vite 一样键入一个字母再按回车:r 重建并重启 应用,c 清屏,q 退出,h 列出这些操作。NO_COLOR 关闭颜色,输出到 文件或管道时每步一行。
开发版应用名为 <name> Dev,标识符为 <identifier>.dev,从而使其数据、 偏好和单实例锁与已安装的应用相互隔离。在 macOS 上,它是一个真正的应用包, 位于 .mygo/dev;在 Windows 上,其可执行文件带有 mygo build 嵌入的图标、 清单和版本信息。
| 标志 | |
|---|---|
使用 -web 时,mygo dev 转而开发在浏览器中的 | |
| 浏览器原生 UI应用:它把应用编译为 WebAssembly,在 | |
http://localhost:5174(或下一个空闲端口)提供服务并打开它,在其 Go 代码 | |
| 变化时重新构建,从而重新加载页面。编译失败的构建会让页面继续运行上一个, | |
并在其上方显示失败原因,直到修复后编译成功。o 再次打开页面。 |
| 标志 | |
|---|---|
-skip-dev-command | 不运行 devCommand,例如开发服务器已在运行时 |
-sign | 在 macOS 上为开发版应用签名的身份(默认:-,临时签名) |
-web | 在浏览器中开发应用 |
-port | 与 -web 连用,提供应用服务的端口,或使用下一个空闲端口(默认:5174) |
-open | 与 -web 连用,是否在浏览器中打开应用(默认:true) |
-lang | 以某种语言(如 de 或 zh-Hant)或伪区域设置(en-XA 或 ar-XB)运行应用,而不改变其保存的语言;见试用某种语言 |
mygo build
mygo build [flags] [dir]构建生产版应用:运行 buildCommand,编译应用并嵌入 frontendDist,并为 每个平台打包到 <out>/<os>-<arch>。见构建与分发。
平台 web(或 js/wasm)会把面向浏览器的原生 UI 应用构建到 <out>/web, 一个可以在任何地方提供服务的静态站点:index.html(加载应用)、Go 的 wasm_exec.js、应用的 WebAssembly(以其内容命名,因而可以永久缓存),以及 图标。见浏览器。
| 标志 | |
|---|---|
-platform | 以逗号分隔的 GOOS/GOARCH 目标,例如 darwin/universal,windows/amd64,linux/amd64,或 web(默认:本机) |
-debug | 保留开发功能,例如 Web 检查器和原生 UI 检查器 |
-o | 输出目录(默认:配置中的 out) |
-sign | macOS 签名身份(默认:macos.signingIdentity) |
-skip-build-command | 不运行 buildCommand |
-skip-dmg | 不制作 macOS 磁盘镜像 |
-skip-notarize | 即使设置了 macos.notarize 也不公证 |
-upload | 用 gh 把安装程序和更新上传到该版本的 GitHub 草稿 release(updates.github),或上传到 updates.s3 的存储桶 |
mygo generate
mygo generate [-o file] [dir]为用 mygo.Bind 绑定的服务和用 mygo.NewEvent 声明的事件写出带类型的 TypeScript 客户端,默认写入配置中的 bindings,除非 -o 指定其他文件。 mygo dev 和 mygo build 会自动运行它;没有前端的应用不会生成客户端。见 生成的客户端。
配置中有 i18n 时,它会先检查应用的目录并写出其函数:目录中的 catalog_gen.go,以及客户端旁边以目录命名的 TypeScript 模块 (src/locales.ts)。目录中的错误会使其停止。
mygo i18n check
mygo i18n check [dir]检查应用的目录:列出其错误,例如无法解析 的消息或译文多出的参数,以及警告,例如缺失的译文;存在错误时以状态 1 退出。
mygo keygen
mygo keygen [flags]创建用于签名更新的密钥对:mygo-update.key(私钥)和 mygo-update.pub,并打印要添加到配置中的 updates 小节。
| 标志 | |
|---|---|
-o | 写入密钥的目录(默认:用户配置目录下的 mygo/update-keys) |
-force | 替换已存在的密钥 |
mygo doctor
检查开发机器:Go、Bun 以及平台的 webview——含 Web 前端的项目需要它们(Linux 上还需要 GTK 3;linux.webview 为 false 的项目则不需要 WebKitGTK)——以及 可选功能的工具:制作 Windows 安装程序所需的 NSIS(mygo build 在 Windows 上会自行下载)、为 Windows 应用签名所需的 signtool 或 osslsigncode、 -upload 所需的 gh,以及为 macOS 应用签名所需的 Developer ID 身份。
mygo version
打印 CLI 的版本。
环境变量
| 变量 | |
|---|---|
CGO_ENABLED | 未设置或为空时默认为 0;当应用依赖需要 cgo 时设为 1,包括在 mygo dev、mygo build 和 mygo generate 中 |
MYGO_LDFLAGS | 为 mygo build 的构建追加的 -ldflags,排在其自带的之后,例如 -X example.com/app/internal/crash.DSN=… 或 -buildid=;按引号外的空格切分,与 go build -ldflags 的切分方式一致 |
MYGO_INSPECTOR | 设为 1 时,mygo build 的生产构建会保留原生 UI 检查器,默认会将其剔除 |
MYGO_UPDATER_PRIVATE_KEY | 为更新签名的私钥,供 mygo build 使用 |
MYGO_WINDOWS_CERTIFICATE_PASSWORD | windows.certificate 的密码,供 mygo build 使用 |
MYGO_CLI_BINARY | 供 mygo-cli 包运行的 CLI 构建 |
MYGO_ENV | production 使应用表现得如同生产构建,例如没有 Web 检查器 |
MYGO_LOCALE | 应用运行所用的语言,覆盖其保存的语言;mygo dev -lang 会设置它 |
对于依赖需要 cgo 的应用:
sh
CGO_ENABLED=1 go tool mygo dev
CGO_ENABLED=1 go tool mygo build