Aller au contenu principal

Instructions pour compiler Electron

Suivez les instructions ci-dessous pour compiler Electron, afin d'ontenir une version personnalisée d'Electron. Pour regrouper et distribuer le code de votre application avec les binaires précompilés d'Electron, reportez-vous au guide de la distribution d'applications.

Prérequis de la plateforme

Vérifiez les prérequis de build pour votre plateforme avant de continuer

Outils de build

Electron's Build Tools automatise une grande partie de la configuration pour compiler Electron à partir des sources avec différentes configurations et cibles de compilation. Si vous souhaitez configurer l'environnement manuellement, les instructions sont énumérées ci-dessous.

Electron utilise GN pour la génération de projet et ninja pour la construction. Les configurations du projet peuvent être trouvées dans les fichiers .gn et .gni .

Fichiers GN

Les fichiers gn suivants contiennent les règles principales pour la construction d'Electron :

  • BUILD.gn définit comment Electron lui-même est construit et inclut les configurations par défaut pour se connecter avec Chromium.
  • build/args/{testing,release,all}.gn contient les arguments de construction par défaut pour compilant Electron.

Prérequis GN

Vous devrez installer depot_tools, l'ensemble d'outils utilisé pour récupérer Chromium et ses dépendances.

De plus, sous Windows, vous devrez définir la variable d'environnement DEPOT_TOOLS_WIN_TOOLCHAIN=0. Pour ce faire, ouvrez Panneau de configurationSystème et SécuritéSystèmeParamètres système avancés et ajouter une variable système DEPOT_TOOLS_WIN_TOOLCHAIN avec la valeur 0. Cela indique au depot_tools d’utiliser votre version locale de Visual Studio (par défaut, depot_tools essaiera de télécharger une version interne de Google uniquement accessible à ses utilisateurs).

Mise en place du cache git

Si vous prévoyez de vérifier Electron plus d'une fois (par exemple, d'avoir plusieurs répertoires parallèles vérifiés sur différentes branches), l'utilisation de du cache git accélérera les appels suivants à gclient. Pour cela, définissez une variable d'environnement GIT_CACHE_PATH:

$ export GIT_CACHE_PATH="${HOME}/.git_cache"
$ mkdir -p "${GIT_CACHE_PATH}"
# Cela utilisera environ 16G.

Obtenir le code

$ mkdir electron && cd electron
$ gclient config --name "src/electron" --unmanaged https://github. om/electron/electron
$ gclient sync --with_branch_heads --with_tags
# Cela prendra un certain temps, allez prendre un café.

Au lieu de https://github.com/electron/electron, vous pouvez utiliser votre propre fork ici (quelque chose comme https://github.com/<username>/electron).

Une note lors du tirage/poussage

Si vous avez l'intention d'effectuer un git pull ou un git push du dépôt officiel electron dans le futur, vous devez maintenant mettre à jour les URL d'origine des répertoires respectifs.

$ cd src/electron
$ git remote remove origin
$ git remote add origin https://github. om/electron/electron
$ git checkout main
$ git branch --set-upstream-to=origin/main
$ cd -

📝 gclient fonctionne en vérifiant un fichier appelé DEPS à l'intérieur du dossier src/electron pour les dépendances (comme Chromium ou Node.js). Exécuter gclient sync -f garantit que toutes les dépendances requises pour construire Electron correspondent à ce fichier.

Donc, pour effectuer le pull, vous exécuterez les commandes suivantes :

$ cd src/electron
$ git pull
$ gclient sync -f

Compilation

Définir la variable d'environnement pour les outils de construction de chromium

Sous Linux & MacOS

$ cd src
$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools

Sur Windows :

$ cd src
$ set CHROMIUM_BUILDTOOLS_PATH=%cd%\buildtools

Pour générer la configuration de la version Testing d'Electron:

$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\")"

Pour générer la configuration de Release build d'Electron:

$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"

Remarque : Cela va générer un répertoire de compilation out/Testing ou out/Release sous src/ avec la version de test ou de publication selon la configuration passée ci-dessus. Vous pouvez remplacer Testing|Release par un autre nom, mais ce doit être un sous-répertoire de out.

Vous ne devriez pas non plus avoir à exécuter gn gen à nouveau. Si vous voulez modifier les arguments de compilation, vous pouvez exécuter gn args out/Testing pour faire apparaître un éditeur. Pour voir la liste des options de configuration de compilation disponibles, exécutez gn args out/Testing --list.

Pour compiler, exécutez ninja avec la cible electron : Remarque : Cela prendra assurement un certain temps.

Pour la configuration de test :

$ ninja -C out/Testing electron

Pour la configuration de la version :

$ ninja -C out/Release electron

Cela compilera tout ce qui était précédemment 'libchromiumcontent' (c'est-à-dire le répertoire content/ de chromium et ses dépendances, incl. Blink et V8), donc cela prendra un certain temps.

L'exécutable produit sera dans ./out/Testing:

$ ./out/Testing/Electron.app/Contents/MacOS/Electron
# or, on Windows
$ ./out/Testing/electron.exe
# or, on Linux
$ ./out/Testing/electron

Empaquetage

Sous Linux, supprimez d'abord les informations de débogage et de symbole :

$ electron/script/strip-binaries.py -d out/Release

Pour empaqueter la compilation d'electron en tant que fichier zip distribuable:

$ ninja -C out/Release electron:electron_dist_zip

Compilation croisée

Pour compiler une plate-forme qui n'est pas la même que celle sur laquelle vous compilez, définissez les arguments GN target_cpu et target_os. Par exemple, pour compiler une cible x86 à partir d'un hôte x64, spécifiez target_cpu = "x86" dans gn args.

$ gn gen out/Testing-x86 --args='... target_cpu = "x86"'

Toutes les combinaisons de source et de cible CPU/OS ne sont pas supportées par Chromium.

HostCibleNotice
Windows x64Windows arm64Expérimental
Windows x64Windows x86Testé automatiquement
Linux x64Linux x86Testé automatiquement

Si vous testez d'autres combinaisons et trouvez qu'elles fonctionnent, veuillez mettre à jour ce document :)

Voir la référence GN pour les valeurs admissibles de target_os et target_cpu.

Windows sur Arm (expérimental)

Pour compilerWindows sur Arm, suivez le guide de Chromium pour obtenir les dépendances nécessaires, SDK et bibliothèques, puis construisez avec ELECTRON_BUILDING_WOA=1 dans votre environnement avant d'exécuter gclient sync.

set ELECTRON_BUILDING_WOA=1
gclient sync -f --with_branch_heads --with_tags

Ou (si vous utilisez PowerShell) :

$env:ELECTRON_BUILDING_WOA=1
gclient sync -f --with_branch_heads --with_tags

Ensuite, exécutez gn gen comme ci-dessus avec target_cpu="arm64".

Tests

Pour exécuter les tests, vous devez d'abord construire les modules de test avec la même version de Node.js qui a été compilée dans le cadre du processus de compilation. Pour générer des en-têtes de compilation pour les modules à compiler, exécutez la commande suivante dans le répertoire src/.

$ ninja -C out/Testing electron:node_headers

Vous pouvez maintenant exécuter les tests.

Si vous déboguez quelque chose, il peut être utile de passer quelques options supplémentaires au binaire d'Electron :

$ npm run test -- \
--enable-logging -g 'BrowserWindow module'

Partage du cache git entre plusieurs machines

Il est possible de partager le cache git gclient avec d'autres machines en l'exportant en tant que SMB sur linux, mais seul un processus/machine peut utiliser le cache à un moment donné. Les verrous créés par le script git-cache essaieront de prévenir cela, mais cela peut ne pas fonctionner parfaitement dans un réseau.

Sous Windows, SMBv2 a un cache de répertoire qui va causer des problèmes avec le script de cache git, donc il est nécessaire de le désactiver en définissant la clé de registre

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Lanmanworkstation\Parameters\DirectoryCacheLifetime

à 0. Plus d'informations : https://stackoverflow.com/a/9935126

Cela peut être défini rapidement dans powershell (exécuté en tant qu'administrateur) :

New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\Lanmanworkstation\Parameters" -Name DirectoryCacheLifetime -Value 0 -PropertyType DWORD -Force

Résolution de problème

gclient sync présente un problème avec rebase

Si gclient sync est interrompu, l'arborescence git rester dans un mauvais état, menant à un message cryptique lors de l'exécution de gclient sync à l'avenir:

2> Conflit en rebasant cette branche.
2> Corriger le conflit et exécuter gclient à nouveau.
2> Voir man git-rebase pour plus de détails.

S'il n'y a pas de conflit git ou de rebases dans src/electron, vous devrez peut-être interompre git am dans src:

$ cd ../
$ git am --abort
$ cd electron
$ gclient sync -f

Cela peut également se produire si vous avez vérifié une branche (par opposition à avoir une tête détachée) dans electron/src/ ou un autre dépôt de dépendances. Si c'est le cas, un git checkout --detach HEAD dans le dépôt approprié devrait faire l'affaire.

On me demande de saisir mes nom d'utilisateur et mot de passe pour chromium-internal.googlesource.com

Si vous voyez une invite pour nom d'utilisateur pour 'https://chrome-internal.googlesource. om': lorsque vous exécutez gclient sync sous Windows, c'est probablement parce que la variable d'environnement DEPOT_TOOLS_WIN_TOOLCHAIN n'est pas définie à 0. Ouvrez Control PanelSystem and SecuritySystemAdvanced system settings et ajoutez une variable système DEPOT_TOOLS_WIN_TOOLCHAIN avec comme valeur 0. Cela indique au depot_tools d’utiliser votre version locale de Visual Studio (par défaut, depot_tools essaiera de télécharger une version interne de Google uniquement accessible à ses utilisateurs).

Module e introuvable

Si e n'est pas reconnu malgré l'exécution de npm i -g @electron/build-tools, et que l'on se retrouve avec :

Error: Cannot find module '/Users/<user>/.electron_build_tools/src/e'

Nous vous recommandons d'installer Node.js via nvm. Cela permet une gestion plus facile des versions de Node et est souvent un correctif pour les modules e manquants.