This guide provides information on how to package your Electron application for any Snapcraft environment, including the Ubuntu Software Center.
Together with the broader Linux community, Canonical aims to fix many of the
  common software installation problems with the snapcraft
  project. Snaps are containerized software packages that include required
  dependencies, auto-update, and work on all major Linux distributions without
  system modification.
There are three ways to create a .snap file:
1) Using electron-forge or
  electron-builder, both tools that come with snap
  support out of the box. This is the easiest option.
  2) Using electron-installer-snap, which takes electron-packager's output.
  3) Using an already created .deb package.
In all cases, you will need to have the snapcraft tool installed. We
  recommend building on Ubuntu 16.04 (or the current LTS).
snap install snapcraft --classicWhile it is possible to install snapcraft on macOS using Homebrew, it
  is not able to build snap packages and is focused on managing packages
  in the store.
electron-installer-snapThe module works like electron-winstaller and similar
  modules in that its scope is limited to building snap packages. You can install
  it with:
npm install --save-dev electron-installer-snapPackage the application using electron-packager (or a
  similar tool). Make sure to remove node_modules that you don't need in your
  final application, since any module you don't actually need will increase
  your application's size.
The output should look roughly like this:
.
  └── dist
      └── app-linux-x64
          ├── LICENSE
          ├── LICENSES.chromium.html
          ├── content_shell.pak
          ├── app
          ├── icudtl.dat
          ├── libgcrypt.so.11
          ├── libnode.so
          ├── locales
          ├── natives_blob.bin
          ├── resources
          ├── snapshot_blob.bin
          └── versionelectron-installer-snapFrom a terminal that has snapcraft in its PATH, run electron-installer-snap
  with the only required parameter --src, which is the location of your packaged
  Electron application created in the first step.
npx electron-installer-snap --src=out/myappname-linux-x64If you have an existing build pipeline, you can use electron-installer-snap
  programmatically. For more information, see the Snapcraft API docs.
const snap = require('electron-installer-snap')
  
  snap(options)
    .then(snapPath => console.log(`Created snap at ${snapPath}!`))Snapcraft is capable of taking an existing .deb file and turning it into
  a .snap file. The creation of a snap is configured using a snapcraft.yaml
  file that describes the sources, dependencies, description, and other core
  building blocks.
If you do not already have a .deb package, using electron-installer-snap
  might be an easier path to create snap packages. However, multiple solutions
  for creating Debian packages exist, including electron-forge,
  electron-builder or
  electron-installer-debian.
For more information on the available configuration options, see the documentation on the snapcraft syntax. Let's look at an example:
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
        - libgconf2-4
        - 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_DIRAs 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 &Alternatively, if you're building your snap with strict confinement, you
  can use the desktop-launch command:
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