electron/docs/tutorial/installation.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

210 lines
7.2 KiB
Markdown
Raw Normal View History

# Advanced Installation Instructions
2017-08-08 10:18:22 -07:00
2018-02-19 17:53:29 -06:00
To install prebuilt Electron binaries, use [`npm`][npm].
2017-08-08 10:18:22 -07:00
The preferred method is to install Electron as a development dependency in your
app:
```sh
2017-10-04 12:41:12 -07:00
npm install electron --save-dev
2017-08-08 10:18:22 -07:00
```
2018-02-19 17:53:29 -06:00
See the [Electron versioning doc][versioning] for info on how to
manage Electron versions in your apps.
2017-08-08 10:18:22 -07:00
## Binary download step
Under the hood, Electron's JavaScript API binds to a binary that contains its
implementations. This binary is crucial to the function of any Electron app, and
is downloaded by default the first time you run Electron in development mode
(i.e. `electron .`).
If you want to install the binary on demand instead, you can run the `install-electron` bin script
included in the `electron` package:
```sh
npx install-electron --no
```
If you want to install your project's dependencies but don't need to use
Electron functionality, you can set the `ELECTRON_SKIP_BINARY_DOWNLOAD` environment
variable to prevent the binary from being downloaded. For instance, this feature can
be useful in continuous integration environments when running unit tests that mock
out the `electron` module.
```sh
ELECTRON_SKIP_BINARY_DOWNLOAD=1 npm install
```
## Running Electron ad-hoc
2017-08-08 10:18:22 -07:00
If you're in a pinch and would prefer to not use `npm install` in your local
project, you can also run Electron ad-hoc using the [`npx`][npx] command runner
bundled with `npm`:
2017-08-08 10:18:22 -07:00
```sh
npx electron .
2017-08-08 10:18:22 -07:00
```
The above command will run the current working directory with Electron. Note that
any dependencies in your app will not be installed.
2017-08-08 10:18:22 -07:00
## Customization
If you want to change the architecture that is downloaded (e.g., `x64` on an
`arm64` machine), you can set the `ELECTRON_INSTALL_ARCH` environment variable:
2017-08-08 10:18:22 -07:00
```sh
# Inside an npm script or with npx
ELECTRON_INSTALL_ARCH=x64 electron .
2017-08-08 10:18:22 -07:00
```
Supported architectures are a subset of Node.js [`process.arch`](https://nodejs.org/api/process.html#processarch)
values, and include:
* `x64` (Intel Mac and 64-bit Windows)
* `ia32` (32-bit Windows)
* `arm64` (Apple silicon, Windows on ARM, ARM64 Linux)
* `arm` (32-bit ARM)
In addition to changing the architecture, you can also specify the platform
2017-08-08 15:22:52 -07:00
(e.g., `win32`, `linux`, etc.) using the `--platform` flag:
```sh
# Inside an npm script or with npx
ELECTRON_INSTALL_PLATFORM=mas electron .
2017-08-08 15:22:52 -07:00
```
Supported platforms are Node-like [platform strings](https://nodejs.org/api/process.html#processplatform):
* `darwin`
* `mas` ([Mac App Store](./mac-app-store-submission-guide.md))
* `win32`
* `linux`
> [!TIP]
> To see all available platform/architecture combinations for a particular release, see the artifacts
> on [Electron's GitHub Releases](https://github.com/electron/electron/releases).
2017-08-08 10:18:22 -07:00
## Proxies
If you need to use an HTTP proxy, you need to set the `ELECTRON_GET_USE_PROXY` variable to any
value, plus additional environment variables depending on your host system's Node version:
* [Node 10 and above][proxy-env-10]
* [Before Node 10][proxy-env]
2017-08-08 10:18:22 -07:00
## Custom mirrors and caches
2018-02-19 17:53:29 -06:00
During installation, the `electron` module will call out to
[`@electron/get`][electron-get] to download prebuilt binaries of
2018-02-19 17:53:29 -06:00
Electron for your platform. It will do so by contacting GitHub's
release download page (`https://github.com/electron/electron/releases/tag/v$VERSION`,
where `$VERSION` is the exact version of Electron).
If you are unable to access GitHub or you need to provide a custom build, you
can do so by either providing a mirror or an existing cache directory.
### Mirror
You can use environment variables to override the base URL, the path at which to
look for Electron binaries, and the binary filename. The URL used by `@electron/get`
is composed as follows:
```js @ts-nocheck
url = ELECTRON_MIRROR + ELECTRON_CUSTOM_DIR + '/' + ELECTRON_CUSTOM_FILENAME
```
For instance, to use the China CDN mirror:
```shell
ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
```
By default, `ELECTRON_CUSTOM_DIR` is set to `v$VERSION`. To change the format,
use the `{{ version }}` placeholder. For example, `version-{{ version }}`
resolves to `version-5.0.0`, `{{ version }}` resolves to `5.0.0`, and
`v{{ version }}` is equivalent to the default. As a more concrete example, to
use the China non-CDN mirror:
```shell
ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
ELECTRON_CUSTOM_DIR="{{ version }}"
```
The above configuration will download from URLs such as
`https://npmmirror.com/mirrors/electron/8.0.0/electron-v8.0.0-linux-x64.zip`.
If your mirror serves artifacts with different checksums to the official
Electron release you may have to set `electron_use_remote_checksums=1` directly,
or configure it in a `.npmrc` file, to force Electron to use the remote `SHASUMS256.txt`
file to verify the checksum instead of the embedded checksums.
### Cache
Alternatively, you can override the local cache. `@electron/get` will cache
downloaded binaries in a local directory to not stress your network. You can use
that cache folder to provide custom builds of Electron or to avoid making contact
with the network at all.
* Linux: `$XDG_CACHE_HOME` or `~/.cache/electron/`
* macOS: `~/Library/Caches/electron/`
* Windows: `$LOCALAPPDATA/electron/Cache` or `~/AppData/Local/electron/Cache/`
On environments that have been using older versions of Electron, you might find the
cache also in `~/.electron`.
You can also override the local cache location by providing a `electron_config_cache`
environment variable.
The cache contains the version's official zip file as well as a checksum, and is stored as
`[checksum]/[filename]`. A typical cache might look like this:
```sh
├── a91b089b5dc5b1279966511344b805ec84869b6cd60af44f800b363bba25b915
│ └── electron-v15.3.1-darwin-x64.zip
```
2017-08-08 10:18:22 -07:00
## Troubleshooting
When running `npm install electron`, some users occasionally encounter
2017-08-08 10:18:22 -07:00
installation errors.
In almost all cases, these errors are the result of network problems and not
actual issues with the `electron` npm package. Errors like `ELIFECYCLE`,
`EAI_AGAIN`, `ECONNRESET`, and `ETIMEDOUT` are all indications of such
network problems. The best resolution is to try switching networks, or
wait a bit and try installing again.
2017-08-08 10:18:22 -07:00
You can also attempt to download Electron directly from
2018-02-19 17:53:29 -06:00
[electron/electron/releases][releases]
2017-08-08 10:18:22 -07:00
if installing via `npm` is failing.
If installation fails with an `EACCESS` error you may need to
2018-02-19 17:53:29 -06:00
[fix your npm permissions][npm-permissions].
2017-08-08 15:22:52 -07:00
2018-02-19 17:53:29 -06:00
If the above error persists, the [unsafe-perm][unsafe-perm] flag may need to be
set to true:
2017-08-08 15:22:52 -07:00
```sh
sudo npm install electron --unsafe-perm=true
```
2018-02-19 17:53:29 -06:00
On slower networks, it may be advisable to use the `--verbose` flag in order to
show download progress:
2017-08-08 15:22:52 -07:00
```sh
npm install --verbose electron
```
2017-08-08 10:18:22 -07:00
If you need to force a re-download of the asset and the SHASUM file set the
2018-02-13 00:18:27 -05:00
`force_no_cache` environment variable to `true`.
2018-02-19 17:53:29 -06:00
[npm]: https://docs.npmjs.com
[versioning]: ./electron-versioning.md
[npx]: https://docs.npmjs.com/cli/v7/commands/npx
2018-02-19 17:53:29 -06:00
[releases]: https://github.com/electron/electron/releases
[proxy-env-10]: https://github.com/gajus/global-agent/blob/v2.1.5/README.md#environment-variables
[proxy-env]: https://github.com/np-maintain/global-tunnel/blob/v2.7.1/README.md#auto-config
[electron-get]: https://github.com/electron/get
2018-02-19 17:53:29 -06:00
[npm-permissions]: https://docs.npmjs.com/getting-started/fixing-npm-permissions
[unsafe-perm]: https://docs.npmjs.com/misc/config#unsafe-perm