Electron Snapcraft 指南 (Linux)

2023-02-16 17:16 更新

本指南提供了有關如何包裝你的 Electron 應用程序的任何 Snapcraft 環(huán)境, 包括 Ubuntu 軟件中心的信息。

背景和要求

與更廣泛的 Linux 社區(qū)一起, 規(guī)范旨在解決 snapcraft 項目中的許多常見的軟件安裝問題。 Snaps 是容器化的軟件包, 包括所需的依賴項、自動更新和對所有主要 Linux 發(fā)行版的工作, 而無需進行系統(tǒng)修改。

創(chuàng)建 .snap 文件有三種方法:

1) 使用 Electron Forge 或 electron-builder,這兩種工具都提供開箱即用的 snap 支持。 這是最簡單的選擇。 

2) 使用 electron-installer-snap, 它采用 electron-packager 的輸出。 

3) 使用已經(jīng)創(chuàng)建的 .deb 包。

在某些情況下,您需要安裝 snapcraft 工具。 安裝特定發(fā)行版的 snapcraft 的指南在這里能看到。

使用 electron-installer-snap

該模塊的工作方式類似于 electron-winstaller 和類似模塊,因為它的范圍僅限于構建 snap 包。你可以這樣安裝:

npm install --save-dev electron-installer-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 的終端,運行帶有唯一必需參數(shù) ?--src? 的 ?electron-installer-snap?,這是第一步中創(chuàng)建的打包 Electron 應用程序的位置。

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

如果您有現(xiàn)有的構建管道,則可以以編程方式使用 electron-installer-snap。有關詳細信息,請參閱 Snapcraft API 文檔。

const snap = require('electron-installer-snap')

snap(options)
  .then(snapPath => console.log(`Created snap at ${snapPath}!`))

在electron-packager中使用sapcraft

第 1 步:創(chuàng)建示例 Snapcraft 項目

創(chuàng)建你的項目目錄并將以下內(nèi)容添加到 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: core18
confinement: strict
grade: stable

apps:
  electron-packager-hello-world:
    command: electron-quick-start/electron-quick-start --no-sandbox
    extensions: [gnome-3-34]
    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:
  electron-quick-start:
    plugin: nil
    source: https://github.com/electron/electron-quick-start.git
    override-build: |
        npm install electron electron-packager
        npx electron-packager . --overwrite --platform=linux --output=release-build --prune=true
        cp -rv ./electron-quick-start-linux-* $SNAPCRAFT_PART_INSTALL/electron-quick-start
    build-snaps:
    - node/14/stable
    build-packages:
    - unzip
    stage-packages:
    - libnss3
    - libnspr4

如果要將此示例應用于現(xiàn)有項目:

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

第 2 步:構建 snap

$ snapcraft

<output snipped>
Snapped electron-packager-hello-world_0.1_amd64.snap

第 3 步:安裝 snap

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

第 4 步:運行 snap

electron-packager-hello-world

使用一個現(xiàn)有的 Debian 包

Snapcraft 能夠獲取現(xiàn)有的 .deb 文件并將其轉換為 .snap 文件??煺盏膭?chuàng)建是使用描述源、依賴項、描述和其他核心構建塊的 snapcraft.yaml 文件配置的。

步驟 1: 創(chuàng)建一個 Debian 包

如果您還沒有 .deb 包,使用 electron-installer-snap 可能是創(chuàng)建 snap 包的更簡單途徑。然而,存在多種創(chuàng)建 Debian 軟件包的解決方案,包括 Electron Forgeelectron-builder 或 electron-installer-debian。

步驟 2: 創(chuàng)建一個 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 指示系統(tǒng)啟動一個名為 electron-launch 的文件。在此示例中,它將信息傳遞給應用程序的二進制文件:

#!/bin/sh

exec "$@" --executed-from="$(pwd)" --pid=$ > /dev/null 2>&1 &

或者,如果您在嚴格限制的情況下構建 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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號