Упаковка различных двоичных файлов для каждой платформы для Electron - PullRequest
1 голос
/ 10 июля 2020

Я создаю приложение Electron, и я создал небольшой двоичный файл демона, написанный на Go, который должен быть упакован вместе с приложением как extraResource. Однако существуют разные версии этого двоичного файла, которые необходимо упаковать в зависимости от платформы, в частности, agent.exe для Windows и agent без расширения для MacOS, и для Linux с тем же именем файла, что и Ma *. 1025 *.

У меня есть эти двоичные файлы в каталоге bin в моем проекте root:

├── bin/
│   ├── windows/
│   │   └── agent.exe
│   ├── mac/
│   │   └── agent
│   ├── linux/
│   │   └── agent

Тестирование для Windows, я включил каталог bin/windows и он работает нормально (пакеты, которые исполняются в каталоге ресурсов, как и ожидалось)

Вот соответствующий фрагмент моего пакета. json

"build": {
  "win": {
    "icon": "build/app.ico",
    "target": [
      {
        "target": "nsis",
        "arch": [
          "x64"
        ]
      }
    ]
  },
  "nsis": {
    "include": "build/installer.nsh",
    "oneClick": false,
    "allowToChangeInstallationDirectory": true,
    "license": "build/eula.txt",
    "installerIcon": "build/app.ico",
    "artifactName": "...",
    "shortcutName": "..."
  },
  "extraResources": [
    "bin/windows/agent.exe"
  ]
}

Возможно ли это? В настоящее время мне пришлось бы отредактировать файл package. json, изменив значение extraResources между сборками разных платформ, что по очевидным причинам не идеально (так как я мог забыть и закончить включение неправильного двоичного файла с помощью забыл вернуть его обратно).

Обратите внимание, что я не поддерживаю 32-разрядную версию Windows, поэтому все сборки Windows будут включать один и тот же (64-разрядный) двоичный файл.

I я использую сборщик электронов 19.50.0

1 Ответ

1 голос
/ 13 июля 2020

Добавьте три новых каталога в ваш каталог build: win, mac и linux, как и мой образец структуры папок выше (изменение windows на win), и добавьте все платформы- укажите двоичные файлы c (и все остальное, что необходимо упаковать вместе с дистрибутивом) в соответствующие каталоги.

Затем добавьте следующее в раздел build package.json:

"extraResources": [
  {
    "from": "bin/${os}",
    "to": "bin",
    "filter": [
      "**/*"
    ]
  }
]

После упаковки эти файлы будут добавлены в каталог bin ваших ресурсов root, поэтому следующие файлы и каталоги появятся в вашем каталоге resources. В моем случае для пакета windows, который встроен в dist/win-unpacked/resources (относительно проекта root)

app.asar.unpacked/
bin/
app.asar
electron.asar
elevate.exe

Таким образом, после того, как ваше приложение будет установлено в целевой системе, оно может быть доступ во время выполнения с использованием process.resourcesPath:

const binaryFileName = process.platform == 'win32' ? 'binfile.exe' : 'binfile';
const binaryFile = path.join(process.resourcesPath, `bin/${binaryFileName}`);
...
spawn(binaryFile, [...args]);

Кредит на это сообщение здесь, в Stack Overflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...