Instructions pour compiler Electron
Suivez les instructions ci-dessous pour compiler Electron, afin d'ontenir une version personnalisée d'Electron. For bundling and distributing your app code with the prebuilt Electron binaries, see the application distribution guide.
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 configuration
→ Système et Sécurité
→ Système
→ Paramè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 commehttps://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 :
# cmd
$ cd src
$ set CHROMIUM_BUILDTOOLS_PATH=%cd%\buildtools
# PowerShell
$ cd src
$ $env:CHROMIUM_BUILDTOOLS_PATH = "$(Get-Location)\buildtools"
Pour générer la configuration de la version Testing d'Electron:
Sous Linux & MacOS
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\")"
Sur Windows :
# cmd
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\")"
# PowerShell
gn gen out/Testing --args="import(\`"//electron/build/args/testing.gn\`")"
Pour générer la configuration de Release build d'Electron:
Sous Linux & MacOS
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
Sur Windows :
# cmd
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
# PowerShell
$ 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.
Host | Cible | Notice |
---|---|---|
Windows x64 | Windows arm64 | Expérimental |
Windows x64 | Windows x86 | Testé automatiquement |
Linux x64 | Linux x86 | Testé 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
You can now run the 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 Panel
→ System and Security
→ System
→ Advanced 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.
RBE authentication randomly fails with "Token not valid"
This could be caused by the local clock time on the machine being off by a small amount. Use time.is to check.