Instrucciones de Compilación
Follow the guidelines below for building Electron itself, for the purposes of creating custom Electron binaries. For bundling and distributing your app code with the prebuilt Electron binaries, see the application distribution guide.
Pre-requisitos de la Plataforma
Comprueba los pre-requisitos de tu plataforma para la compilación antes de avanzar
Herramientas de construcción
Electron's Build Tools automate much of the setup for compiling Electron from source with different configurations and build targets. Si deseas configurar el entorno de forma manual, las instrucciones se enumeran a continuación.
Electron usa gyp para la generación de proyectos y ninja para su compilación. Las configuraciones del Proyecto puede ser encontradas en los archivos .gn
y .gni
.
Archivos GN
Los siguientes archivos gn
contienen las reglas principales para la construcción de Electron:
BUILD.gn
define como Electron mismo es construido e incluye la configuraciones predeterminadas para enlazar con Chromium.build/args/{testing,release,all}.gn
contiene los argumentos por defecto para la construcción de Electron.
Pre-requisitos de GN
Necesitaras instalar depot_tools
, el conjunto de herramientas usadas para consumir Chromium y sus dependencias.
Ademas, en Windows, tendrás que asignar la variable de ambiente DEPOT_TOOLS_WIN_TOOLCHAIN=0
. Para hacerlo, abre Panel de Control
→ Sistema y Seguridad
→ Sistema
→ Opciones de Configuración Avanzadas
y agrega a tu sistema la variable de ambiente DEPOT_TOOLS_WIN_TOOLCHAIN
con el valor 0
. Esto le indica a depot_tools
que utilice tu version instalada de Visual Studio (por defecto, depot_tools
intentará descargar una version interna de Google, a la cual solo empleados de Google tienen acceso).
Configurar el cache de Git
Si planeas hacer checkout de Electron más de una vez (por ejemplo, para tener múltiples directorios paralelos verificados en diferentes ramas), el uso del cache git acelerará las llamadas posteriores a gclient
. Para hacer esto, establezca una variable de entorno GIT_CACHE_PATH
:
$ export GIT_CACHE_PATH="${HOME}/.git_cache"
$ mkdir -p "${GIT_CACHE_PATH}"
# Esto usará alrededor de 16G.
Obteniendo el código
$ mkdir electron && cd electron
$ gclient config --name "src/electron" --unmanaged https://github.com/electron/electron
$ gclient sync --with_branch_heads --with_tags
# This will take a while, go get a coffee.
En lugar de
https://github.com/electron/electron
, puedes usar tu propio fork aquí (algo comohttps://github.com/<username>/electron
).
Una nota al tirar/empujar
Si usted tiene la intención de git pull
or git push
desde el repositorio oficial electron
en el futuro, ahora necesita actualizar las URLs de la carpeta origin correspondiente.
$ cd src/electron
$ git remote remove origin
$ git remote add origin https://github.com/electron/electron
$ git checkout main
$ git branch --set-upstream-to=origin/main
$ cd -
📝 gclient
funciona verificando las dependencias en un archivo llamado DEPS
dentro de la carpeta src/electron
(tales como Chromium o Node.js). Ejecutar gclient sync -f
asegura que todas las dependencias requeridas para compilar Electron coninciden con ese archivo.
Así que, para tirar, ejecutarías los siguientes comandos:
$ cd src/electron
$ git pull
$ gclient sync -f
Compilando
Set the environment variable for chromium build tools
On Linux & MacOS
$ cd src
$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
On Windows:
# cmd
$ cd src
$ set CHROMIUM_BUILDTOOLS_PATH=%cd%\buildtools
# PowerShell
$ cd src
$ $env:CHROMIUM_BUILDTOOLS_PATH = "$(Get-Location)\buildtools"
To generate Testing build config of Electron:
On Linux & MacOS
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\")"
On 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\`")"
To generate Release build config of Electron:
On Linux & MacOS
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
On 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\`")"
Note: This will generate a out/Testing
or out/Release
build directory under src/
with the testing or release build depending upon the configuration passed above. You can replace Testing|Release
with another names, but it should be a subdirectory of out
.
Also you shouldn't have to run gn gen
again—if you want to change the build arguments, you can run gn args out/Testing
to bring up an editor. To see the list of available build configuration options, run gn args out/Testing --list
.
To build, run ninja
with the electron
target: Note: This will also take a while and probably heat up your lap.
Para la configuración de depuración:
$ ninja -C out/Testing electron
Para la configuración de la lanzamiento:
$ ninja -C out/Release electron
This will build all of what was previously 'libchromiumcontent' (i.e. the content/
directory of chromium
and its dependencies, incl. Blink and V8), so it will take a while.
El ejecutable compilado estará en ./out/Testing
:
$ ./out/Testing/Electron.app/Contents/MacOS/Electron
# or, on Windows
$ ./out/Testing/electron.exe
# or, on Linux
$ ./out/Testing/electron
Embalaje
En linux, primero elimine la información de depuración y de símbolos:
$ electron/script/strip-binaries.py -d out/Release
Para empaquetar la aplicación compilada electron como un archivo zip distribuible:
$ ninja -C out/Release electron:electron_dist_zip
Compilación cruzada
Para compilar una plataforma que no sea la misma que la que estás construyendo, establece los argumentos GN target_cpu
y target_os
. Por ejemplo, para compilar un objetivo x86 de un host x64, especificar target_cpu = "x86"
en gn args
.
$ gn gen out/Testing-x86 --args='... target_cpu = "x86"'
No todas las combinaciones de origen y destino sea CPU/SO son compatibles con Chromium.
Host | Objetivo | Estado |
---|---|---|
Windows x64 | Windows arm64 | Experimental |
Windows x64 | Windows x86 | Automáticamente probado |
Linux x64 | Linux x86 | Automáticamente probado |
Si prueba otras combinaciones y las encuentra para funcionar, por favor actualice este documento :)
See the GN reference for allowable values of target_os
and target_cpu
.
Windows en Arm (experimental)
To cross-compile for Windows on Arm, follow Chromium's guide to get the necessary dependencies, SDK and libraries, then build with ELECTRON_BUILDING_WOA=1
in your environment before running gclient sync
.
set ELECTRON_BUILDING_WOA=1
gclient sync -f --with_branch_heads --with_tags
O (si usa PowerShell):
$env:ELECTRON_BUILDING_WOA=1
gclient sync -f --with_branch_heads --with_tags
Despues, corra gn gen
como arriba con target_cpu="arm64"
.
Verificación
Para ejecutar las pruebas, primero deberás compilar los módulos de prueba en la misma versión de node.js en la que se creó el proceso de compilación. Para generar cabeceras de compilación para los módulos a compilar, ejecute lo siguiente en el directorio src/
.
$ ninja -C out/Testing electron:node_headers
You can now run the tests.
Si estás depurando algo, puede ser de gran ayuda pasarle algunas banderas adicionales a el binario de Electron:
$ npm run test -- \
--enable-logging -g 'BrowserWindow module'
Compartir la caché git entre varias máquinas
Es posible compartir este directorio con otras máquinas exportándolo como SMB share en Linux, pero solo un proceso/máquina puede usar la memoria caché a la vez. Los bloqueos creados por el script git-cache intentarán evitar esto, pero puede que no funcione perfectamente en una red.
En Windows, SMBv2 tiene un caché de directorio que causará problemas con el script del git cache, por lo que es necesario desactivarlo configurando la clave de registro
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Lanmanworkstation\Parameters\DirectoryCacheLifetime
a cero. Para más información: https://stackoverflow.com/a/9935126
Esto puede establecerse rápidamente en powershell (ejecutado como administrador):
New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\Lanmanworkstation\Parameters" -Name DirectoryCacheLifetime -Value 0 -PropertyType DWORD -Force
Problemas
gclient sync se queja sobre rebase
Si gclient sync
es interrumpido el arbol de git puede quedar en mal estado, lo que conduce a un mensaje críptico cuando se ejecuta gclient sync
en el futuro:
2> Conflict while rebasing this branch.
2> Fix the conflict and run gclient again.
2> See man git-rebase for details.
Si no hay conflictos de git o rebases en src/electron
, puede necesitar abortar un git am
en src
:
$ cd ../
$ git am --abort
$ cd electron
$ gclient sync -f
This may also happen if you have checked out a branch (as opposed to having a detached head) in electron/src/
or some other dependency’s repository. If that is the case, a git checkout --detach HEAD
in the appropriate repository should do the trick.
Se me está pidiendo un nombre de usuario/contraseña para chromium-internal.googlesource.com
Si ve un prompt para Username for 'https://chrome-internal.googlesource.com':
cuando corre gclient sync
en Windows, es probable que la variable de entorno DEPOT_TOOLS_WIN_TOOLCHAIN
no esta establecida a 0. Abra Control Panel
→ System and Security
→ System
→ Advanced system settings
y agregue un variable de sistema DEPOT_TOOLS_WIN_TOOLCHAIN
con valor 0
. Esto le indica a depot_tools
que utilice tu version instalada de Visual Studio (por defecto, depot_tools
intentará descargar una version interna de Google, a la cual solo empleados de Google tienen acceso).
e
Module not found
If e
is not recognized despite running npm i -g @electron/build-tools
, ie:
Error: Cannot find module '/Users/<user>/.electron_build_tools/src/e'
We recommend installing Node through nvm. This allows for easier Node version management, and is often a fix for missing e
modules.
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.