Snapcraft 指南 (Ubuntu 软件中心 & 更多)

本指南提供了有关如何包装你的 Electron 应用程序的任何 Snapcraft 环境, 包括 Ubuntu 软件中心的信息。

背景和要求

与更广泛的 Linux 社区一起, 规范旨在解决 snapcraft 项目中的许多常见的软件安装问题。 Snaps 是容器化的软件包, 包括所需的依赖项、自动更新和对所有主要 Linux 发行版的工作, 而无需进行系统修改。

创建 .snap 文件有三种方法:

1) 使用 electron-forgeelectron-builder, 与 snap 支持的两个工具都不在该框中。 这是最简单的选择。 2) 使用 electron-installer-snap, 它采用 electron-packager 的输出。 3) 使用已经创建的 .deb 包。

在某些情况下,您需要安装 snapcraft 工具。 安装特定发行版的 snapcraft 的指南在这里能看到。

使用 electron-installer-snap

该模块的工作原理与electron-winstaller类似 因为它的范围仅限于构建捕捉包。 你可以这样安装:

  1. npm install --save-dev electron-installer-snap

步骤 1: 打包你的 Electron 应用程序

打包应用程序使用 electron-packager (或类似工具)。 请务必删除 node_modules 您在您的 最后应用程序中不需要 因为您不需要任何模块,您将会增加 您的应用程序的大小。

结构输出应该看起来大致像这样:

  1. .
  2. └── dist
  3. └── app-linux-x64
  4. ├── LICENSE
  5. ├── LICENSES.chromium.html
  6. ├── content_shell.pak
  7. ├── app
  8. ├── icudtl.dat
  9. ├── libgcrypt.so.11
  10. ├── libnode.so
  11. ├── locales
  12. ├── resources
  13. ├── v8_context_snapshot.bin
  14. └── version

步骤 2: 运行 electron-installer-snap

从一个在 PATH中有 快照 的终端, 运行 electron-installer-snap 带唯一需要的参数 --src, 这是你打包的位置 Electron 应用程序创建在第一步。

  1. npx electron-installer-snap --src=out/myappname-linux-x64

如果您有一个现有的构建管道,您可以程序性地使用 electron-installer-snap 欲了解更多信息,请参阅 Snapcraft API 文档

  1. const snap = require('electron-installer-snap')
  2. snap(options)
  3. .then(snapPath => console.log(`Created snap at ${snapPath}!`))

Using snapcraft with electron-packager

第 1 步:创建示例 Snapcraft 项目

创建你的项目目录并将以下内容添加到 snap/snapcraft.yaml

  1. name: electron-packager-hello-world
  2. version: '0.1'
  3. summary: Hello World Electron app
  4. description: |
  5. Simple Hello World Electron app as an example
  6. base: core18
  7. confinement: strict
  8. grade: stable
  9. apps:
  10. electron-packager-hello-world:
  11. command: electron-quick-start/electron-quick-start --no-sandbox
  12. extensions: [gnome-3-34]
  13. plugs:
  14. - browser-support
  15. - network
  16. - network-bind
  17. environment:
  18. # Correct the TMPDIR path for Chromium Framework/Electron to ensure
  19. # libappindicator has readable resources.
  20. TMPDIR: $XDG_RUNTIME_DIR
  21. parts:
  22. electron-quick-start:
  23. plugin: nil
  24. source: https://github.com/electron/electron-quick-start.git
  25. override-build: |
  26. npm install electron electron-packager
  27. npx electron-packager . --overwrite --platform=linux --output=release-build --prune=true
  28. cp -rv ./electron-quick-start-linux-* $SNAPCRAFT_PART_INSTALL/electron-quick-start
  29. build-snaps:
  30. - node/14/stable
  31. build-packages:
  32. - unzip
  33. stage-packages:
  34. - libnss3
  35. - libnspr4

如果要将此示例应用于现有项目:

  • 替代 source: https://github.com/electron/electron-quick-start.git</0 > 为 <code>source: ...
  • 替代所有的 electron-quick-start 为你的项目名称。

第 2 步:构建 snap

  1. $ snapcraft
  2. <output snipped>
  3. Snapped electron-packager-hello-world_0.1_amd64.snap

第 3 步:安装 snap

  1. sudo snap install electron-packager-hello-world_0.1_amd64.snap --dangerous

第 4 步:运行 snap

  1. electron-packager-hello-world

使用一个现有的 Debian 包

Snapcraft 能够拿起现有的 .deb 文件并将其转换为 一个 .snap 文件。 创建吸附器使用 快照配器。 aml 文件描述了源、依赖、描述和其他核心 基础块。

步骤 1: 创建一个 Debian 包

如果您还没有一个 .deb 包,使用 electron-installer-snap 可能是一个更容易创建吸附包的路径。 然而,存在多个创建 Debian 软件包的解决方案 ,包括 Electron-forge, electron-builder or electron-installer-debian.

步骤 2: 创建一个 snapcraft.yaml

有关可用配置选项的详细信息,请参阅快照 snapcraft 语法文档。 Let’s look at an example:

  1. name: myApp
  2. version: '2.0.0'
  3. summary: A little description for the app.
  4. description: |
  5. You know what? This app is amazing! It does all the things
  6. for you. Some say it keeps you young, maybe even happy.
  7. grade: stable
  8. confinement: classic
  9. parts:
  10. slack:
  11. plugin: dump
  12. source: my-deb.deb
  13. source-type: deb
  14. after:
  15. - desktop-gtk3
  16. stage-packages:
  17. - libasound2
  18. - libnotify4
  19. - libnspr4
  20. - libnss3
  21. - libpcre3
  22. - libpulse0
  23. - libxss1
  24. - libxtst6
  25. electron-launch:
  26. plugin: dump
  27. source: files/
  28. prepare: |
  29. chmod +x bin/electron-launch
  30. apps:
  31. myApp:
  32. command: bin/electron-launch $SNAP/usr/lib/myApp/myApp
  33. desktop: usr/share/applications/myApp.desktop
  34. # Correct the TMPDIR path for Chromium Framework/Electron to ensure
  35. # libappindicator has readable resources.
  36. environment:
  37. TMPDIR: $XDG_RUNTIME_DIR

As you can see, the snapcraft.yaml instructs the system to launch a file called electron-launch. In this example, it passes information on to the app’s binary:

  1. #!/bin/sh
  2. exec "$@" --executed-from="$(pwd)" --pid=$$ > /dev/null 2>&1 &

或者,如果您正在构建您的 吸附 带有 严格的 封装,您 可以使用 桌面启动 命令:

  1. apps:
  2. myApp:
  3. # Correct the TMPDIR path for Chromium Framework/Electron to ensure
  4. # libappindicator has readable resources.
  5. command: env TMPDIR=$XDG_RUNTIME_DIR PATH=/usr/local/bin:${PATH} ${SNAP}/bin/desktop-launch $SNAP/myApp/desktop
  6. desktop: usr/share/applications/desktop.desktop