What is @electron/get?
@electron/get is an npm package designed to facilitate the downloading of Electron binaries. It provides a simple API to fetch Electron versions, which can be useful for setting up Electron-based projects or managing different versions of Electron.
What are @electron/get's main functionalities?
Download a specific version of Electron
This feature allows you to download a specific version of Electron. The code sample demonstrates how to download Electron version 13.1.7 and log the path where it was downloaded.
const { download } = require('@electron/get');
(async () => {
const zipPath = await download('v13.1.7');
console.log(`Downloaded Electron v13.1.7 to ${zipPath}`);
})();
Specify a mirror for downloading
This feature allows you to specify a mirror URL for downloading Electron binaries. The code sample shows how to download Electron version 13.1.7 from a custom mirror.
const { download } = require('@electron/get');
(async () => {
const zipPath = await download('v13.1.7', {
mirrorOptions: {
mirror: 'https://mirror.example.com/electron/'
}
});
console.log(`Downloaded Electron v13.1.7 from mirror to ${zipPath}`);
})();
Get the URL for a specific Electron version
This feature allows you to get the download URL for a specific version of Electron without actually downloading it. The code sample demonstrates how to get the URL for Electron version 13.1.7.
const { getDownloadUrl } = require('@electron/get');
(async () => {
const url = await getDownloadUrl('v13.1.7');
console.log(`Download URL for Electron v13.1.7: ${url}`);
})();
Other packages similar to @electron/get
electron-download
electron-download is another package that helps in downloading Electron binaries. It is often used internally by other Electron-related tools. Compared to @electron/get, it offers similar functionalities but may not be as straightforward to use for some specific tasks.
electron-builder
electron-builder is a complete solution to package and build Electron applications. While its primary focus is on building and packaging, it also includes functionality to download Electron binaries. It is more feature-rich compared to @electron/get but may be overkill if you only need to download Electron binaries.
electron-prebuilt-compile
electron-prebuilt-compile is a package that provides prebuilt Electron binaries with support for custom compilation. It is useful for developers who need to compile Electron with specific settings. Compared to @electron/get, it offers more flexibility but requires more setup.
@electron/get
Download Electron release artifacts
Usage
Simple: Downloading an Electron Binary ZIP
import { download } from '@electron/get';
const zipFilePath = await download('4.0.4');
Advanced: Downloading a macOS Electron Symbol File
import { downloadArtifact } from '@electron/get';
const zipFilePath = await downloadArtifact({
version: '4.0.4',
platform: 'darwin',
artifactName: 'electron',
artifactSuffix: 'symbols',
arch: 'x64',
});
Specifying a mirror
To specify another location to download Electron assets from, the following options are
available:
mirrorOptions
Object
mirror
String (optional) - The base URL of the mirror to download from.nightlyMirror
String (optional) - The Electron nightly-specific mirror URL.customDir
String (optional) - The name of the directory to download from, often scoped by version number.customFilename
String (optional) - The name of the asset to download.resolveAssetURL
Function (optional) - A function allowing customization of the url used to download the asset.
Anatomy of a download URL, in terms of mirrorOptions
:
https://github.com/electron/electron/releases/download/v4.0.4/electron-v4.0.4-linux-x64.zip
| | | |
------------------------------------------------------- -----------------------------
| |
mirror / nightlyMirror | | customFilename
------
||
customDir
Example:
import { download } from '@electron/get';
const zipFilePath = await download('4.0.4', {
mirrorOptions: {
mirror: 'https://mirror.example.com/electron/',
customDir: 'custom',
customFilename: 'unofficial-electron-linux.zip'
}
});
const nightlyZipFilePath = await download('8.0.0-nightly.20190901', {
mirrorOptions: {
nightlyMirror: 'https://nightly.example.com/',
customDir: 'nightlies',
customFilename: 'nightly-linux.zip'
}
});
customDir
can have the placeholder {{ version }}
, which will be replaced by the version
specified (without the leading v
). For example:
const zipFilePath = await download('4.0.4', {
mirrorOptions: {
mirror: 'https://mirror.example.com/electron/',
customDir: 'version-{{ version }}',
platform: 'linux',
arch: 'x64'
}
});
Using environment variables for mirror options
Mirror options can also be specified via the following environment variables:
ELECTRON_CUSTOM_DIR
- Specifies the custom directory to download from.ELECTRON_CUSTOM_FILENAME
- Specifies the custom file name to download.ELECTRON_MIRROR
- Specifies the URL of the server to download from if the version is not a nightly version.ELECTRON_NIGHTLY_MIRROR
- Specifies the URL of the server to download from if the version is a nightly version.
Overriding the version downloaded
The version downloaded can be overriden by setting the ELECTRON_CUSTOM_VERSION
environment variable.
Setting this environment variable will override the version passed in to download
or downloadArtifact
.
How It Works
This module downloads Electron to a known place on your system and caches it
so that future requests for that asset can be returned instantly. The cache
locations are:
- Linux:
$XDG_CACHE_HOME
or ~/.cache/electron/
- MacOS:
~/Library/Caches/electron/
- Windows:
%LOCALAPPDATA%/electron/Cache
or ~/AppData/Local/electron/Cache/
By default, the module uses got
as the
downloader. As a result, you can use the same options
via downloadOptions
.
Progress Bar
By default, a progress bar is shown when downloading an artifact for more than 30 seconds. To
disable, set the ELECTRON_GET_NO_PROGRESS
environment variable to any non-empty value, or set
quiet
to true
in downloadOptions
. If you need to monitor progress yourself via the API, set
getProgressCallback
in downloadOptions
, which has the same function signature as got
's
downloadProgress
event callback.
Proxies
Downstream packages should utilize the initializeProxy
function to add HTTP(S) proxy support. If
the environment variable ELECTRON_GET_USE_PROXY
is set, it is called automatically. A different
proxy module is used, depending on the version of Node in use, and as such, there are slightly
different ways to set the proxy environment variables. For Node 10 and above,
global-agent
is used. Otherwise,
global-tunnel-ng
is used. Refer to the
appropriate linked module to determine how to configure proxy support.