Snapcraft Guide (Linux)
Esta guía provee información sobre cómo empacar you aplicación en Electron para cualquier ambiente en Snapcraft, incluyendo el Centro de Software de Ubuntu.
Antecedentes y Requerimientos
Juntos con las amplia comunidad de Linux, Canonical busca arreglar algunos de los problemas comúnes de instalación de software con snapcraft
. Snaps son paquetes contenerizados de software que incluyen dependencias requeridas, auto-actualizaciones, y funcionan en las mayores distribuciones de Linux sin modificaciones del sistema.
Hay tres maneras de crear un archivo .snap
:
1) Using Electron Forge or electron-builder
, both tools that come with snap
support out of the box. Esta es la opción más fácil. 2) Usando electron-installer-snap
, que toma el resultado de electron-packager
. 3) Usando un paquete .deb
ya creado.
En algunos casos, deberás tener instalada la herramienta Snapcraft
. Instructions to install snapcraft
for your particular distribution are available here.
Usando electron-installer-snap
The module works like electron-winstaller
and similar modules in that its scope is limited to building snap packages. Puede instalarlo con:
npm install --save-dev electron-installer-snap
Paso 1: Empaqueta tu aplicación Electron
Package the application using electron-packager (or a similar tool). Asegúrese de eliminar los node_modules
que no necesita en su aplicación final, ya que cualquier módulo que actualmente no necesite aumentará el tamaño de su aplicación.
La salida debería verse más o menos de esta forma:
.
└── 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
Paso 2: Ejecutando electron-installer-snap
Desde una terminal que tenga snapcraft
en su PATH
, ejecute electron-installer-snap
solo con el parámetro requerido --src
, el cual es la ubicación de su aplicación empaquetada Electron que se creo en el primer paso.
npx electron-installer-snap --src=out/myappname-linux-x64
Si tiene un pipeline de construcción existente, puede usar electron-installer-snap
programáticamente. For more information, see the Snapcraft API docs.
const snap = require('electron-installer-snap')
snap(options)
.then(snapPath => console.log(`Created snap at ${snapPath}!`))
Usar snapcraft
con electron-packager
Paso 1: Crear proyecto de Snapcraft de Ejemplo
Crea el directorio de tu proyecto y agrega lo siguiente al 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
Si quiere aplicar este ejemplo a un proyecto existente:
- Reemplace
source: https://github.com/electron/electron-quick-start.git
consource: .
. - Reemplace todas las instancias de
electron-quick-start
con el nombre de su proyecto.
Paso 2: Construye el snap
$ snapcraft
<output snipped>
Snapped electron-packager-hello-world_0.1_amd64.snap
Paso 3: Instalar el snap
sudo snap install electron-packager-hello-world_0.1_amd64.snap --dangerous
Paso 4: Ejecutar el snap
electron-packager-hello-world
Usando un paquete de Debian existente
Snapcraft es capaz de tomar un archivo .deb
existente y convertirlo en un archivo .snap
. La creación de un a snap es configurado usando un archivo snapcraft.yaml
que describe las fuentes, dependencias, descripción y otros bloques de construcción.
Paso 1: Crear un paquete Debian
Si aún no tienes listo un paquete .deb
, usando electron-installer-snap
podría ser una forma más fácil para crear el paquete instantáneo. However, multiple solutions for creating Debian packages exist, including Electron Forge, electron-builder
or electron-installer-debian
.
Paso 2: Creando un snapcraft.yaml
For more information on the available configuration options, see the documentation on the snapcraft syntax. Veamos un ejemplo:
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
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:
#!/bin/sh
exec "$@" --executed-from="$(pwd)" --pid=$$ > /dev/null 2>&1 &
Alternativamente, si esta construyendo su snap
con aislamiento strict
, puede usar el comando 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