143 lines
5.6 KiB
Markdown
143 lines
5.6 KiB
Markdown
|
# @electron/get
|
||
|
|
||
|
> Download Electron release artifacts
|
||
|
|
||
|
[![CircleCI](https://circleci.com/gh/electron/get.svg?style=svg)](https://circleci.com/gh/electron/get)
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
### Simple: Downloading an Electron Binary ZIP
|
||
|
|
||
|
```typescript
|
||
|
import { download } from '@electron/get';
|
||
|
|
||
|
// NB: Use this syntax within an async function, Node does not have support for
|
||
|
// top-level await as of Node 12.
|
||
|
const zipFilePath = await download('4.0.4');
|
||
|
```
|
||
|
|
||
|
### Advanced: Downloading a macOS Electron Symbol File
|
||
|
|
||
|
|
||
|
```typescript
|
||
|
import { downloadArtifact } from '@electron/get';
|
||
|
|
||
|
// NB: Use this syntax within an async function, Node does not have support for
|
||
|
// top-level await as of Node 12.
|
||
|
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:
|
||
|
|
||
|
```typescript
|
||
|
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'
|
||
|
}
|
||
|
});
|
||
|
// Will download from https://mirror.example.com/electron/custom/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'
|
||
|
}
|
||
|
});
|
||
|
// Will download from https://nightly.example.com/nightlies/nightly-linux.zip
|
||
|
```
|
||
|
|
||
|
`customDir` can have the placeholder `{{ version }}`, which will be replaced by the version
|
||
|
specified (without the leading `v`). For example:
|
||
|
|
||
|
```javascript
|
||
|
const zipFilePath = await download('4.0.4', {
|
||
|
mirrorOptions: {
|
||
|
mirror: 'https://mirror.example.com/electron/',
|
||
|
customDir: 'version-{{ version }}',
|
||
|
platform: 'linux',
|
||
|
arch: 'x64'
|
||
|
}
|
||
|
});
|
||
|
// Will download from https://mirror.example.com/electron/version-4.0.4/electron-v4.0.4-linux-x64.zip
|
||
|
```
|
||
|
|
||
|
#### 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`](https://github.com/sindresorhus/got) as the
|
||
|
downloader. As a result, you can use the same [options](https://github.com/sindresorhus/got#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](https://github.com/sindresorhus/got#ondownloadprogress-progress).
|
||
|
|
||
|
### 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`](https://github.com/gajus/global-agent#environment-variables) is used. Otherwise,
|
||
|
[`global-tunnel-ng`](https://github.com/np-maintain/global-tunnel#auto-config) is used. Refer to the
|
||
|
appropriate linked module to determine how to configure proxy support.
|