# 手动构建 Wails CLI 为项目做了很多繁重的工作,但有时需要手动构建项目。 本文档将讨论 CLI 执行的不同操作以及如何以不同方式实现这一点。 ## 构建过程 当使用 `wails build` 或 `wails dev` 时,Wails CLI 会执行一个通用的构建过程: - 安装前端依赖 - 构建前端项目 - 生成构建资产 - 编译应用程序 - [可选]压缩应用程序 ### 安装前端依赖 #### 命令行步骤 - 如果给出了 `-s` 标志,则跳过此步骤 - 检查 `wails.json` 中是否有安装命令 `frontend:install` - 如果没有,则跳过此步骤 - 如果有,则检查前端目录中是否存在 `package.json`。 如果不存在,则跳过这一步 - 从 `package.json` 文件内容生成 MD5 - 检查 `package.json.md5` 是否存在,如果存在,则将其内容(MD5 sum)与生成的内容进行比较,以查看内容是否已更改。 如果相同,则跳过此步骤 - 如果 `package.json.md5` 不存在,则使用生成的 MD5 并创建它 - 如果现在需要构建,或者 `node_modules` 不存在,或者给出了`-f` 标志,则在前端目录中执行安装命令 #### 手动步骤 这一步可以从命令行或带有 `npm install` 的前端脚本完成. ### 构建前端项目 #### Wails 命令行 - 如果给出了 `-s` 标志,则跳过此步骤 - 检查 `wails.json` 中是否有构建命令 `frontend:build` - 如果没有,则跳过此步骤 - 如果有,就在 frontend 目录下执行它 #### 手动步骤 这一步可以从命令行或带有前端构建脚本 `npm run build` 的脚本或任何前端构建脚本完成。 ### 生成资产 #### Wails 命令行 - 如果设置了`-nopackage` 标志,则跳过此阶段 - 如果 `build/appicon.png` 文件不存在,则创建一个默认文件 - 对于 Windows,请参阅 [ Windows](#windows) - 如果 `build/windows/icon.ico` 不存在,它将从 `build/appicon.png` 图像创建它。 ##### Windows - 如果 `build/windows/icon.ico` 不存在,它将从 `build/appicon.png` 创建 256、128、64、48、32 和 16 大小的图标。 这是使用 [winicon](https://github.com/leaanthony/winicon) 完成的。 - 如果 `build/windows/.manifest` 文件不存在,它会从默认版本创建它。 - 将应用程序编译为生产版本(如上所述)。 - 使用 [winres](https://github.com/tc-hib/winres) 将 icon 和 manifest 打包到一个 `.syso` 文件。 #### 手动步骤 - 使用[winicon](https://github.com/leaanthony/winicon)命令行工具或者其他工具创建`icon.ico` - 为您的应用程序创建或者更新 `.manifest` 文件 - 使用 [winres 命令行](https://github.com/tc-hib/go-winres) 生成一个 `.syso` 文件 ### 编译应用程序 #### Wails 命令行 - 如果提供了 `-clean` 标志,则删除并重新创建 `build` 目录 - 对于 `wails dev`,使用以下默认 Go 标志:`-tags dev -gcflags "all=-N -l"` - 对于 `wails build`,使用以下默认 Go 标志:`-tags desktop,production -ldflags "-w -s"` - 在 Windows 上,是 `-ldflags "-w -h -H windowsgui"` - 传递给 CLI 的附加标签使用 `-tags` 添​​加到默认值中 - 传递给 CLI 的附加 `ldflags-ldflags` 添加到默认值 - 传递 `-o` 标志 - 将使用指定的 Go 编译器 `-compiler` 进行编译 #### 手动步骤 - 对于 dev 构建,最少的命令是:`go build -tags dev -gcflags "all=-N -l"` - 对于生产构建,最少的命令是:`go build -tags desktop,production -ldflags "-w -s -H windowsgui"` - 确保在与 `.syso` 文件相同的目录中进行编译 ### 压缩应用程序 #### Wails 命令行 - 如果 `-upx` 已给出标志,将运行 `upx` 程序以使用默认设置压缩应用程序 - 如果也传递了 `-upxflags` 标志,则使用这些标志而不是默认 #### 手动步骤 - 手动运行 `upx [flags]` 以压缩应用程序。