Electron package guidelines

Arch package guidelines
32-bit
–
CLR
–
CMake
–
Cross
–
DKMS
–
Eclipse
–
Electron
–
Font
–
Free Pascal
–
GNOME
–
Go
–
Haskell
–
Java
–
KDE
–
Kernel modules
–
Lisp
–
Meson
–
MinGW
–
Node.js
–
Nonfree
–
OCaml
–
Perl
–
PHP
–
Python
–
R
–
Ruby
–
Rust
-
Security
–
Shell
–
VCS
–
Web
–
Wine
This document covers standards and guidelines on writing
PKGBUILDs
for
Electron
.
Using the system electron
Arch Linux provides versioned
electron*
packages and an
electron
metapackage for the latest version. They can be used to run an electron application via a shell script wrapper:
#!/bin/sh

exec /usr/bin/electron34 /path/to/
appname
/ "$@"
The
appname
/
directory, or alternatively a file bundle called
appname
.asar
, can be found in a prebuilt electron application as the
resources/app/
folder (or
resources/app.asar
). Everything else is just a copy of the electron runtime and can be removed from the final package.
Note
Applications that require
ELECTRON_RUN_AS_NODE=1
, e.g.
Visual Studio Code
, cannot use
/usr/bin/electron*
. See
code.sh
.
Editing version on package.json
It is dangerous to edit version of Electron in
package.json
or
package-lock.json
using
sed
. You can use
npm pkg set devDependencies.electron=$(cat /usr/lib/electron*/version)
instead.
The factual accuracy of this article or section is disputed.
Reason:
Editing package.json may not needed and unrelated to building modules correctly. (Discuss in
Talk:Electron package guidelines
)
Building compiled extensions against the system electron
Some electron applications have compiled native extensions which link to the electron runtime, and must be built using the correct electron version. Since npm/yarn will always build against a private prebuilt copy of electron, patch the electron dependency from
package.json
to reference the same version as the system electron dependency. The build system will download the prebuilt copy it requires, compile the native extensions, and package everything into a final distribution, but this can be pruned during the
package()
step as usual.
Alternatively, you can remove the electron dependency from
package.json
and set the correct environment variables before running npm:
export npm_config_target=$(tail /usr/lib/electron/version)
export npm_config_arch=x64
export npm_config_target_arch=x64
export npm_config_disturl=
https://electronjs.org/headers
[
dead link
2023-10-29—HTTP 404]
export npm_config_runtime=electron
export npm_config_build_from_source=true
HOME="$srcdir/.electron-gyp" npm install
Set
HOME
to a path inside the
$srcdir
so the build process does not place any files in your real
HOME
directory. Make sure to adjust the path for all further commands that make use of the
.electron-gyp
cache.
(more details
in Electron docs
).
Using electron-builder with system electron
Many projects use
electron-builder
to build and package the Javascript file and Electron binaries. By default electron-builder downloads the entire electron version that is defined in the package management file (e.g.
package.json
). This might not be desired if you want to use the system electron and save the bandwidth since you are going to throw away the electron binaries anyway. The electron-builder provides the configurations
electronDist
and
electronVersion
, to specify a custom path of Electron and the version the application is packaged for respectively.
Find the electron-builder configuration file (e.g.
electron-builder.json
) and add the following settings:
electronDist
to
/usr/lib/electron34
for
electron34
electronVersion
to the contents of
/usr/lib/electron34/version
(without the leading
v
if exists)
Packages that apply this:
rocketchat-desktop
AUR
ubports-installer-git
AUR
electron-builder configuration
Alternatively you can use the CLI to change/add these settings like this:
./node_modules/.bin/electron-builder --linux --x64 --dir $dist -c.electronDist=$electronDist -c.electronVersion=$electronVer
Note that you have to specify all these options or it will not work.
The factual accuracy of this article or section is disputed.
Reason:
Current setting still copies Electron from $electronDist . It is expired to add the method to stop it.  (Discuss in
Talk:Electron package guidelines
)
The factual accuracy of this article or section is disputed.
Reason:
Packaging with Arch's Electron discards fuses bits
[1]
flipped by electron-builder. Some bits should be emulated by including environment variables to launcher. (Discuss in
Talk:Electron package guidelines
)
Architecture
See
PKGBUILD#arch
.
An Electron package that contains compiled native extensions is architecture-dependent. Otherwise it is most likely architecture-independent.
If the package contains a prebuilt copy of electron, it is always architecture-dependent.
Directory structure
If the package is architecture-dependent, install the
resources/app/
directory to
/usr/lib/
appname
/
. Otherwise use
/usr/share/
appname
/
.
If the package contains a prebuilt copy of electron, copy the final distribution in its entirety to
/opt/
appname
.
Getting version of Electron
Version of Electron could be given by
npm pkg get devDependencies.electron
in the directory containing
package.json
or
package-lock.json
.
Prebuild or
Nonfree
application hides version of electron from
package.json
,
package-lock.json
, and
version
files. In such case, you may get version by replacing
app
or
app.asar
with
/usr/lib/electron/resources/default_app.asar
and running
pathto/electron-binary
--version
.
Note
Avoid doing it at PKGBUILD. This should be last resort to make packages with system-wide electron.