Note: electron-packager can build directly to snap packages and avoid these steps completely.
Unfortunately, the build process quite work using just the nodejs plugin. So, you have to override the build and install process with manual operations to get it going.
parts:
node-app:
plugin: nodejs
source: .
build: |
npm run build &&
./node_modules/.bin/electron-packager . --overwrite --platform=linux --arch=x64 --output=release-build --prune=true
install: |
cp -v -r SafexWallet-linux-x64 $SNAPCRAFT_PART_INSTALL/wallet
More info on parts like build and install, check out the following link
https://snapcraft.io/docs/reference/plugins/common
To find out more details about the plugin, snapcraft details
snapcraft help nodejs
Electron uses the GTK toolkit to build it's GUI. Snapcraft includes functionality to help you add the necessary dependencies.
parts:
node-app:
plugin: nodejs
source: .
build: |
npm run build &&
./node_modules/.bin/electron-packager . --overwrite --platform=linux --arch=x64 --output=release-build --prune=true
install: |
cp -v -r SafexWallet-linux-x64 $SNAPCRAFT_PART_INSTALL/wallet
after: [ desktop-gtk2 ]
If you want to learn more about exactly desktop-gtk2 is doing, what dependencies it adds and what plugs are recommended, use this command.
snapcraft define desktop-gtk2
You'll need a wrapper to load all gtk libraries necessary to run the binary. The good thing is snapcraft has prebuilt functionality for this. All you need to do is prefix your command with desktop-launch
app:
test:
command: desktop-launch $SNAP/my-node-command
Build it.
snapcraft clean && snapcraft
Finished!