Coder Social home page Coder Social logo

jasonhinkle / electron-builder Goto Github PK

View Code? Open in Web Editor NEW

This project forked from electron-userland/electron-builder

1.0 4.0 0.0 102.34 MB

Build installers for Electron apps the easy way

License: MIT License

NSIS 0.47% JavaScript 2.27% HTML 87.28% Objective-C 6.88% C 1.12% TypeScript 1.81% Shell 0.01% Smarty 0.15%

electron-builder's Introduction

Complete solution to build ready for distribution and "auto update" installers of your app for OS X, Windows and Linux.

electron-packager, appdmg and windows-installer are used under the hood.

Real project example — onshape-desktop-shell.

Configuration

In short

  1. Ensure that required fields are specified in the application package.json:

Standard name, description, version and author.

Custom build field must be specified:

"build": {
  "app-bundle-id": "your.id",
  "app-category-type": "your.app.category.type",
  "iconUrl": "(windows only) A URL to an ICO file to use as the application icon, see details below"
}

This object will be used as a source of electron-packager options. You can specify any other options here.

  1. Create directory build in the root of the project and put your background.png (OS X DMG background), icon.icns (OS X app icon) and icon.ico (Windows app icon). Linux icon set will be generated automatically on the fly from the OS X icns file.

  2. Add scripts to the development package.json:

    "scripts": {
      "postinstall": "install-app-deps",
      "pack": "build",
      "dist": "build"
    }

    And then you can run npm run pack or npm run dist (to package in a distributable format (e.g. DMG, windows installer, NuGet package)).

  3. Install required system packages.

iconUrl

Please note — local icon file url is not accepted, must be https/http.

  • If you don't plan to build windows installer, you can omit it.
  • If your project repository is public on GitHub, it will be https://raw.githubusercontent.com/${info.user}/${info.project}/master/build/icon.ico by default.

Distributable Format Configuration

In the development package.json custom build field can be specified to customize distributable format:

"build": {
  "osx": {
    "title": "computed name from app package.js, you can overwrite",
    "icon": "build/icon.icns",
    "icon-size": 80,
    "background": "build/background.png",
    "contents": [
      {
        "x": 410,
        "y": 220,
        "type": "link",
        "path": "/Applications"
      },
      {
        "x": 130,
        "y": 220,
        "type": "file",
        "path": "computed path to artifact, do not specify it - will be overwritten"
      }
    ]
  },
  "win": "see https://github.com/electronjs/windows-installer#usage"
}

As you can see, you need to customize OS X options only if you want to provide custom x, y. Don't customize paths to background and icon, — just follow conventions (if you don't want to use build as directory of resources — please create issue to ask ability to customize it).

See OS X options and Windows options.

Auto Update

electron-builder produces all required artifacts:

  • .dmg: OS X installer, required for OS X user to initial install.
  • -mac.zip: required for Squirrel.Mac.
  • .exe and -x64.exe: Windows installer, required for Windows user to initial install. Please note — your app must handle Squirrel.Windows events. See real example.
  • .full-nupkg: required for Squirrel.Windows.
  • -amd64.deb and -i386.deb: Linux Debian package. Please note — by default the most effective xz compression format used.

You need to deploy somewhere releases/downloads server.

In general, there is a possibility to setup it as a service for all (it is boring to setup own if cloud service is possible). May be it will be soon (feel free to file an issue to track progress). It is safe since you should sign your app in any case (so, even if server will be compromised, users will not be affected because OS X will just block unsigned/unidentified app).

Code signing

OS X and Windows code singing is supported. On a development machine set environment variable CSC_NAME to your identity (recommended). Or pass --sign parameter.

export CSC_NAME="Developer ID Application: Your Name (code)"

Travis, AppVeyor and other CI servers

To sign app on build server:

  1. Export certificate. Strong password must be used. Consider to not use special characters (for bash) because “values are not escaped when your builds are executed”.
  2. Upload *.p12 file (e.g. on Google Drive).
  3. Set (Travis or AppVeyor) CSC_LINK and CSC_KEY_PASSWORD environment variables:
travis encrypt "CSC_LINK='https://drive.google.com/uc?export=download&id=***'" --add
travis encrypt 'CSC_KEY_PASSWORD=beAwareAboutBashEscaping!!!' --add

Build Version Management

CFBundleVersion (OS X) and FileVersion (Windows) will be set automatically to version.build_number on CI server (Travis, AppVeyor and CircleCI supported).

CLI usage

Execute node_modules/.bin/build --help to get actual CLI usage guide. In most cases you should not explicitly pass flags, so, we don't want to promote it here (npm lifecycle is supported and script name is taken in account). Want more — please file issue.

Programmatic usage

See node_modules/electron-builder/out/electron-builder.d.ts. Typings is supported.

Old API (< 2.8)

Old API is deprecated, but not dropped. You can use it as before. Please note — new API by default produces Squirrel.Windows installer, set target to build NSIS:

build --target=nsis

electron-builder's People

Contributors

avoidwork avatar championswimmer avatar citrusui avatar dab0bby avatar demetris-manikas avatar develar avatar etiktin avatar freewil avatar frondor avatar greenkeeperio-bot avatar havenchyk avatar jasonhinkle avatar malept avatar maxcnunes avatar mkaz avatar radibit avatar stefanjudis avatar tengyifei avatar vxsx avatar xseignard avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.