Snapcraft 指南 (Linux)¶
本指南提供了如何将你的 Electron 应用打包到任何 Snapcraft 环境(包括 Ubuntu Software Center)的相关信息。
背景和要求¶
Canonical 与更广泛的 Linux 社区一起,旨在通过 snapcraft 项目解决常见的软件安装问题。Snap 是容器化的软件包,包含所需的依赖项,支持自动更新,并且无需修改系统即可在所有主流 Linux 发行版上运行。
有三种方法可以创建 .snap 文件:
1) 使用 Electron Forge 或 electron-builder,这两个工具都开箱即用地支持 snap。这是最简单的选择。
2) 使用 electron-installer-snap,它接受 @electron/packager 的输出。
3) 使用已经创建好的 .deb 包。
在某些情况下,你需要安装 snapcraft 工具。针对你特定发行版的 snapcraft 安装说明可在 此处 获取。
使用 electron-installer-snap¶
该模块的工作方式与 electron-winstaller 及类似模块相似,其范围仅限于构建 snap 包。你可以通过以下命令安装它:
第 1 步:打包你的 Electron 应用¶
使用 @electron/packager(或类似工具)打包应用。请确保移除最终应用中不需要的 node_modules,因为任何实际不需要的模块都会增加应用的体积。
输出大致如下所示:
.
└── dist
└── app-linux-x64
├── LICENSE
├── LICENSES.chromium.html
├── content_shell.pak
├── app
├── icudtl.dat
├── libgcrypt.so.11
├── libnode.so
├── locales
├── resources
├── v8_context_snapshot.bin
└── version
第 2 步:运行 electron-installer-snap¶
在 PATH 中包含 snapcraft 的终端中,使用唯一的必需参数 --src 运行 electron-installer-snap,该参数指向你在第一步中创建的已打包 Electron 应用的位置。
如果你已有构建流水线,可以通过编程方式使用 electron-installer-snap。更多信息,请参阅 Snapcraft API 文档。
```js @ts-nocheck const snap = require('electron-installer-snap')
snap(options)
.then(snapPath => console.log(Created snap at ${snapPath}!))
## 将 `snapcraft` 与 `@electron/packager` 结合使用 {#using-snapcraft-with-electron-packager}
### 第 1 步:创建示例 Snapcraft 项目 {#step-1-create-sample-snapcraft-project}
```sh
$ npx create-electron-app@latest my-app
第 2 步:创建示例 Snapcraft 项目¶
在项目根目录下创建一个 snap 目录,并将以下内容添加到 snap/snapcraft.yaml:
name: electron-packager-hello-world
version: '0.1'
summary: Hello World Electron app
description: |
Simple Hello World Electron app as an example
base: core22
confinement: strict
grade: stable
apps:
electron-packager-hello-world:
command: my-app/my-app --no-sandbox
extensions: [gnome]
plugs:
- browser-support
- network
- network-bind
environment:
# Correct the TMPDIR path for Chromium Framework/Electron to ensure
# libappindicator has readable resources.
TMPDIR: $XDG_RUNTIME_DIR
parts:
my-app:
plugin: nil
source: .
override-build: |
npm install electron @electron/packager
npx electron-packager . --overwrite --platform=linux --output=release-build --prune=true
cp -rv ./my-app-linux-* $SNAPCRAFT_PART_INSTALL/my-app
build-snaps:
- node/14/stable
build-packages:
- unzip
stage-packages:
- libnss3
- libnspr4
如果你想将此示例应用于现有项目,请将所有的 my-app 替换为你的项目名称。
第 3 步:构建 snap¶
第 4 步:安装 snap¶
第 5 步:运行 snap¶
使用现有的 Debian 包¶
Snapcraft 能够获取现有的 .deb 文件并将其转换为 .snap 文件。snap 的创建通过 snapcraft.yaml 文件进行配置,该文件描述了源、依赖项、描述以及其他核心构建模块。
第 1 步:创建 Debian 包¶
如果你还没有 .deb 包,使用 electron-installer-snap 可能是创建 snap 包的更简单途径。不过,创建 Debian 包的解决方案有很多,包括 Electron Forge、electron-builder 或 electron-installer-debian。
第 2 步:创建 snapcraft.yaml¶
有关可用配置选项的更多信息,请参阅 snapcraft 语法文档。让我们看一个示例:
name: myApp
version: '2.0.0'
summary: A little description for the app.
description: |
You know what? This app is amazing! It does all the things
for you. Some say it keeps you young, maybe even happy.
grade: stable
confinement: classic
parts:
slack:
plugin: dump
source: my-deb.deb
source-type: deb
after:
- desktop-gtk3
stage-packages:
- libasound2
- libnotify4
- libnspr4
- libnss3
- libpcre3
- libpulse0
- libxss1
- libxtst6
electron-launch:
plugin: dump
source: files/
prepare: |
chmod +x bin/electron-launch
apps:
myApp:
command: bin/electron-launch $SNAP/usr/lib/myApp/myApp
desktop: usr/share/applications/myApp.desktop
# Correct the TMPDIR path for Chromium Framework/Electron to ensure
# libappindicator has readable resources.
environment:
TMPDIR: $XDG_RUNTIME_DIR
如你所见,snapcraft.yaml 指示系统启动一个名为 electron-launch 的文件。在此示例中,它会向应用程序的二进制文件传递信息:
或者,如果你使用 strict 约束构建 snap,可以使用 desktop-launch 命令:
apps:
myApp:
# Correct the TMPDIR path for Chromium Framework/Electron to ensure
# libappindicator has readable resources.
command: env TMPDIR=$XDG_RUNTIME_DIR PATH=/usr/local/bin:${PATH} ${SNAP}/bin/desktop-launch $SNAP/myApp/desktop
desktop: usr/share/applications/desktop.desktop
可选:启用桌面捕获¶
捕获桌面在某些使用 Wayland 协议的 Linux 配置中需要 PipeWire 库。要将 PipeWire 与你的应用程序捆绑,请确保基础 snap 设置为 core22 或更高版本。接下来,创建一个名为 pipewire 的 part,并将其添加到应用程序的 after 部分:
pipewire:
plugin: nil
build-packages: [libpipewire-0.3-dev]
stage-packages: [pipewire]
prime:
- usr/lib/*/pipewire-*
- usr/lib/*/spa-*
- usr/lib/*/libpipewire*.so*
- usr/share/pipewire
最后,为你的应用程序配置 PipeWire 环境:
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron