Packaging d’une application Electron

Présentation

Electron est un framework maintenu par GitHub qui permet de créer des applications lourdes en javascript/HTML/CSS. Il est  open source et utilisable sur toutes les plateformes (MacOS, Windows et Linux). Le framework permet entre autre d'utiliser les notifications natives de la plateforme, d'installer des mises à jour automatiques via Squirrel et il dispose d'outil de debug (dont la console pour développeur de Chromium). Je vous invite à consulter cet article pour plus d'informations.

L'objectif d'une application lourde est souvent le déploiement sur de nombreux postes et il est assez fréquent que ces postes ne disposent pas d'un environnement node. Nous allons voir dans cet article trois solutions pour disposer d'un livrable exploitable sur toutes les plateformes. Les exemples suivants ont été testés sur Linux (distribution Mint 18.1) et Windows 10.

Le packaging simple avec asar

D'après la documentation d'Electron, on peut packager l'application en utilisant le package officiel asar. Il suffit de l'ajouter le package au projet via npm install puis lancer la commande suivante dans le répertoire du projet :

asar pack workspace/app mon-app.asar

Il est possible de vérifier ce que contient l'archive asar avec la commande :

asar list monApp.asar

Le packaging est terminé. Si on a installé le package electron en global, on peut lancer l'application simplement avec la commande :

electron mon-app.asar

On a donc un moyen de packager l'application avec un seul fichier et de la lancer avec un exécutable (qui peut être renommé) en ligne de commande. Ce n'est pas encore suffisant pour un client non technique donc Electron propose deux moyens alternatifs de livrer l'application au client. Ces deux packages sont maintenus par une communauté d'utilisateurs : Electron Userland.

 

Le packaging avec electron-packager

Pour commencer, il faut installer le package electron-packager. Ensuite on lance la commande suivante :

electron-packager . mon-app-name --overwrite --platform=linux --arch=x64 --prune=true --out=release-build

On a dans l'ordre :

  • Le path vers le projet
  • Le nom de l'application
  • L'option pour écraser le répertoire de sortie s'il existe déjà
  • La plateforme cible
  • L'architecture de la plateforme
  • L'option qui permet d'alléger le build
  • Le répertoire de sortie

Un répertoire release-build a bien été créé. Il contient un dossier mon-app-name-linux-x64 qui contient mon application. On peut cliquer sur l'exécutable mon-app-name dans le dossier pour lancer l'application. Les sources de l'application sont visibles dans le répertoire resources et sont modifiables. Ce comportement peut être souhaitable mais si ce n'est pas le cas, il suffit d'ajouter l'option --asar à la commande précédente et les sources seront rassemblées dans un seul fichier non lisible :

 

 

Le packaging avec electron-builder

Pour commencer, il faut installer le package electron-builder. Ensuite il faut ajouter les informations suivantes au package.json :

"build": {
  "appId": "mon-app-id",
  "mac": {
    "category": "mon-app-category"
  }
}

On crée ensuite un répertoire build dans lequel on va mettre l'icône de notre application (un fichier PNG, un fichier ICNS et un fichier ICO). Cette étape est facultative : si electron-builder ne trouve pas ce dossier il utilisera l'icône par défaut d'Electron.

Puis lancer la commande suivante en spécifiant le chemin vers le projet, la plateforme cible et l'architecture de la plateforme :

electron-builder . --linux --x64

On obtient un répertoire dist dans lequel on a l'installateur de l'application (un fichier exécutable) et un dossier dont le nom dépend de la cible (linux-unpacked dans mon cas) qui contient les sources de l'application non packagées pour des besoins de debug.

Une fois installée on peut retrouver l'application depuis le lanceur :

Conslusion

Electron ne fournit pas officiellement de solution pour livrer un exécutable unique à un client mais les deux projets des contributeurs permettent de le faire simplement. Ces deux projets disposent de multiples options pour créer un livrable sur toutes les plateformes. Il est conseillé de penser à la livraison de l'application lors des premiers développements du projet pour éviter tout problème : certains packages node peuvent poser des problèmes lors du packaging, notamment si vous utilisez un framework JS complet en complément d'électron. Il faut noter aussi que l'application une fois packagée est assez lourde : quelques dizaines de Mo dans la plupart des cas, voire plus. On peut expliquer la taille de l'archive par le fait qu'elle embarque Chromium et les librairies nécessaires à l'installation/exécution sur la plateforme. Dans la plupart des cas Electron est une bonne solution pour créer une application lourde distribuable sur la plupart des plateformes avec un langage que beaucoup de développeurs connaissent.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *