Skip to content

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-app

go 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 智能体技能,提供维护应用时关于元素生命周期、稳定标识、线程和测试的指导。

标志
-templateweb:TypeScript 前端(默认);native:用 Go 编写的原生 UI
-name应用名称(默认:目录名)
-moduleGo 模块路径(默认:目录名)
-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)
-signmacOS 签名身份(默认: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_PASSWORDwindows.certificate 的密码,供 mygo build 使用
MYGO_CLI_BINARY供 mygo-cli 包运行的 CLI 构建
MYGO_ENVproduction 使应用表现得如同生产构建,例如没有 Web 检查器
MYGO_LOCALE应用运行所用的语言,覆盖其保存的语言;mygo dev -lang 会设置它

对于依赖需要 cgo 的应用:

sh
CGO_ENABLED=1 go tool mygo dev
CGO_ENABLED=1 go tool mygo build