Multi Platform Build - electron-builder (original) (raw)

Info

Don’t expect that you can build app for all platforms on one platform.

Free public Electron Build Service is used to build Electron app for Linux on Windows. On macOS/Linux you can build Electron app for Windows locally, except Appx for Windows Store (in the future (feel free to file issue) electron-build-service will support Appx target).

You can use build servers — e.g. Travis to build macOS/Linux apps and AppVeyor to build Windows app.

By default build for current platform and current arch. Use CLI flags --mac, --win, --linux to specify platforms. And --ia32, --x64 to specify arch.

For example, to build app for MacOS, Windows and Linux:

Build performed in parallel, so, it is highly recommended to not use npm task per platform (e.g. npm run dist:mac && npm run dist:win32), but specify multiple platforms/targets in one build command. You don’t need to clean dist output before build — output directory is cleaned automatically.

Sample .travis.yml to Build Electron App for macOS, Linux and Windows

sample .travis.yml

`matrix: include: - os: osx osx_image: xcode10.2 language: node_js node_js: "10" env: - ELECTRON_CACHE=$HOME/.cache/electron - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder

- os: linux
  services: docker
  language: generic

cache: directories: - node_modules - $HOME/.cache/electron - $HOME/.cache/electron-builder

script:

branches: except: - "/^v\d+\.\d+\.\d+$/" `

Sample appveyor.yml to Build Electron App for Windows

Use AppVeyor only if: * you need to build AppX, * or your app has native dependency and prebuilt binary is not provided.

Otherwise see above sample .travis.yml to build Windows on Linux using provided Docker image.

sample appveyor.yml

`image: Visual Studio 2017

platform:

cache:

init:

install:

build_script:

test: off `

macOS

All required system dependencies (except rpm) will be downloaded automatically on demand on macOS 10.12+ (macOS Sierra). On Travis, please add osx_image: xcode10.2 (see above sample .travis.yml).

To build rpm: brew install rpm (brew).

Linux

You can use Docker to avoid installing system dependencies.

To build app in distributable format for Linux:

sudo apt-get install --no-install-recommends -y libopenjp2-tools

To build rpm: sudo apt-get install --no-install-recommends -y rpm (or sudo yum install rpm-build).

To build pacman: sudo apt-get install --no-install-recommends -y bsdtar.

To build snap if and only if you have custom stage packages (if you don’t have custom snap build configuration, you don’t need to install). See snapcraft in Store.

sudo snap install snapcraft --classic sudo snap install multipass --beta --classic

To build app for Windows on Linux:

Docker (electronuserland/builder:wine) is recommended to avoid installing system dependencies.

To build app in 32 bit from a machine with 64 bit:

sudo apt-get install --no-install-recommends -y gcc-multilib g++-multilib

Travis Linux

Xenial is required.

sudo: required dist: xenial

Travis macOS

macOS 10.14+ is required.

Docker

To build Linux or Windows on any platform.

Warning

You cannot build for Windows using Docker if you have native dependencies and native dependency doesn’t use prebuild.

See example Docker usage on a CI server in the sample .travis.yml.

Build Electron App using Docker on a Local Machine

  1. Run docker container:
    docker run --rm -ti \ --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS_TAG|TRAVIS|TRAVIS_REPO_|TRAVIS_BUILD_|TRAVIS_BRANCH|TRAVIS_PULL_REQUEST_|APPVEYOR_|CSC_|GH_|GITHUB_|BT_|AWS_|STRIP|BUILD_') \ --env ELECTRON_CACHE="/root/.cache/electron" \ --env ELECTRON_BUILDER_CACHE="/root/.cache/electron-builder" \ -v ${PWD}:/project \ -v ${PWD##*/}-node-modules:/project/node_modules \ -v ~/.cache/electron:/root/.cache/electron \ -v ~/.cache/electron-builder:/root/.cache/electron-builder \ electronuserland/builder:wine
  2. Type in yarn && yarn dist

If you don’t have dist npm script in your package.json, call ./node_modules/.bin/electron-builder directly.

Or to avoid second step, append to first command /bin/bash -c "yarn && yarn dist" You can use /test.sh to install dependencies and run tests.

Tip

If you don’t need to build Windows, use image electronuserland/builder (wine is not installed in this image).

Provided Docker Images