Поддержка Linux
Обзор
Wails предлагает поддержку Linux, но составить инструкции по установке для всех доступных дистрибутивов - это невыполнимая задача. Вместо этого Wails пытается определить, доступны ли пакеты для разработки через системный менеджер пакетов. В настоящее время мы поддерживаем следующие менеджеры пакетов:
- apt
- dnf
- emerge
- eopkg
- nixpkgs
- pacman
- zypper
Добавление имен пакетов
Может возникнуть ситуация, когда ваш дистрибутив использует один из поддерживаемых менеджеров пакетов, но имя пакета отличается от названия. Например, вы можете использовать производную от Ubuntu систему, но имя пакета для gtk может быть другим. Wails пытается найти правильный пакет, ища по списку имен пакетов. Список пакетов хранится в файле (packagemanager) в каталоге 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()
должен возвращать точную команду для установки данного пакета
Взгляните на другие коды менеджеров пакетов, чтобы получить представление о том, как это работает.
::info Помните
Если вы добавите поддержку для нового менеджера пакетов, не забудьте также обновить эту страницу!
:::