跳至主要内容
版本:v2.9.0

Linux 发行版支持

概述

Wails 提供 Linux 支持,但为所有可用的发行版提供安装说明是一项不可能完成的任务。相反,Wails 尝试确定您开发应用程序所需的软件包是否可以通过系统的软件包管理器获得。目前,我们支持以下软件包管理器

  • apt
  • dnf
  • emerge
  • eopkg
  • nixpkgs
  • pacman
  • zypper

添加包名

在某些情况下,您的发行版可能使用支持的软件包管理器之一,但软件包名称不同。例如,您可能使用 Ubuntu 衍生版,但 gtk 的软件包名称可能不同。Wails 尝试通过迭代软件包名称列表来找到正确的软件包。软件包列表存储在 v2/internal/system/packagemanager 目录中特定于软件包管理器的文件中。在我们的示例中,这将是 v2/internal/system/packagemanager/apt.go

在这个文件中,软件包列表由 Packages() 方法定义。

func (a *Apt) Packages() packagemap {
return packagemap{
"libgtk-3": []*Package{
{Name: "libgtk-3-dev", SystemPackage: true, Library: true},
},
"libwebkit": []*Package{
{Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true},
},
"gcc": []*Package{
{Name: "build-essential", SystemPackage: true},
},
"pkg-config": []*Package{
{Name: "pkg-config", SystemPackage: true},
},
"npm": []*Package{
{Name: "npm", SystemPackage: true},
},
"docker": []*Package{
{Name: "docker.io", SystemPackage: true, Optional: true},
},
}
}

假设在我们的 Linux 发行版中,libgtk-3 打包在名为 lib-gtk3-dev 的包中。我们可以通过添加以下行来添加对它的支持

func (a *Apt) Packages() packagemap {
return packagemap{
"libgtk-3": []*Package{
{Name: "libgtk-3-dev", SystemPackage: true, Library: true},
{Name: "lib-gtk3-dev", SystemPackage: true, Library: true},
},
"libwebkit": []*Package{
{Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true},
},
"gcc": []*Package{
{Name: "build-essential", SystemPackage: true},
},
"pkg-config": []*Package{
{Name: "pkg-config", SystemPackage: true},
},
"npm": []*Package{
{Name: "npm", SystemPackage: true},
},
"docker": []*Package{
{Name: "docker.io", SystemPackage: true, Optional: true},
},
}
}

添加新的软件包管理器

要添加新的软件包管理器,请执行以下步骤

  • v2/internal/system/packagemanager 中创建一个名为 <pm>.go 的新文件,其中 <pm> 是软件包管理器的名称。
  • 定义一个结构体,该结构体符合在 pm.go 中定义的软件包管理器接口。
type PackageManager interface {
Name() string
Packages() packagemap
PackageInstalled(*Package) (bool, error)
PackageAvailable(*Package) (bool, error)
InstallCommand(*Package) string
}
  • Name() 应该返回软件包管理器的名称。
  • Packages() 应该返回一个 packagemap,它提供依赖项的候选文件名。
  • PackageInstalled() 应该在给定软件包已安装时返回 true
  • PackageAvailable() 应该在给定软件包未安装但可供安装时返回 true
  • InstallCommand() 应该返回安装给定软件包名称的确切命令。

查看其他软件包管理器的代码以了解它的工作原理。

记住

如果您添加了对新软件包管理器的支持,请不要忘记更新此页面!