2015-10-07 17:11:58 +00:00
|
|
|
# Introdução
|
|
|
|
|
|
|
|
Electron permite criar aplicações desktop com puro JavaScript através de
|
2015-10-07 17:24:09 +00:00
|
|
|
um runtime com APIs ricas e nativas. Você pode ver isso como uma variação do
|
2015-10-07 17:11:58 +00:00
|
|
|
runtime do io.js que é focado em aplicações desktop em vez de web servers.
|
|
|
|
|
2015-11-30 21:14:33 +00:00
|
|
|
Isso não significa que o Electron é uma ligação em JavaScript para bibliotecas
|
2015-11-18 01:37:45 +00:00
|
|
|
de interface gráfica (GUI). Em vez disso, Electron usa páginas web como
|
2015-10-07 17:11:58 +00:00
|
|
|
interface gráfica, então você pode ver isso também como um navegador Chromium
|
|
|
|
mínimo, controlado por JavaScript.
|
|
|
|
|
|
|
|
### Processo Principal
|
|
|
|
|
2015-11-18 01:37:45 +00:00
|
|
|
No Electron, o processo que executa o script principal (main) do `package.json`
|
2015-10-07 17:11:58 +00:00
|
|
|
é chamado __processo principal__. O script que roda no processo principal pode
|
|
|
|
mostrar uma GUI criando páginas web.
|
|
|
|
|
|
|
|
### Processo Renderizador
|
|
|
|
|
2015-11-30 21:14:33 +00:00
|
|
|
Já que o Electron usa o Chromium para mostrar as páginas web, a arquitetura
|
2015-10-07 17:11:58 +00:00
|
|
|
multi-processo do Chromium também é usada. Cada página web no Electron roda em
|
|
|
|
seu próprio processo, o que é chamado de __processo renderizador__.
|
|
|
|
|
|
|
|
Em navegadores comuns, as páginas web normalmente rodam em um ambiente em sandbox
|
2015-11-30 21:14:33 +00:00
|
|
|
e não têm permissão de acesso para recursos nativos. Usuários Electron, entretanto,
|
|
|
|
têm o poder de usar as APIs do io.js nas páginas web, permitindo interações de baixo
|
2015-10-07 17:11:58 +00:00
|
|
|
nível no sistema operacional.
|
|
|
|
|
|
|
|
### Diferenças Entre o Processo Principal e o Processo Renderizador
|
|
|
|
|
|
|
|
O processo principal cria as páginas web criando instâncias de `BrowserWindow`.
|
|
|
|
Cada instância de `BrowserWindow` roda a página web em seu próprio processo renderizador.
|
|
|
|
Quando uma instância de `BrowserWindow` é destruída, o processo renderizador
|
|
|
|
correspondente também é finalizado.
|
|
|
|
|
2015-11-30 21:14:33 +00:00
|
|
|
O processo principal gerencia todas as páginas web de seus processos renderizadores
|
2015-10-07 17:11:58 +00:00
|
|
|
correspondentes. Cada processo renderizador é isolado e toma conta de sua
|
|
|
|
respectiva página web.
|
|
|
|
|
|
|
|
Nas páginas web, chamar APIs nativas relacionadas à GUI não é permitido porque
|
2015-11-30 21:14:33 +00:00
|
|
|
gerenciar recursos de GUI em páginas web é muito perigoso e torna fácil o vazamento de
|
2015-10-07 17:24:09 +00:00
|
|
|
recursos. Se você quer realizar operações com GUI em páginas web, o processo
|
2015-10-07 17:11:58 +00:00
|
|
|
renderizador da página web deve se comunicar com o processo principal para requisitar
|
|
|
|
que o processo principal realize estas operações.
|
|
|
|
|
|
|
|
No Electron, nós fornecemos o módulo [ipc](../../../docs/api/ipc-renderer.md) para
|
2015-10-07 17:24:09 +00:00
|
|
|
comunicação entre o processo principal e o processo renderizador. Que é também um
|
2015-10-07 17:11:58 +00:00
|
|
|
módulo [remoto](../../../docs/api/remote.md) para comunicação RPC.
|
|
|
|
|
|
|
|
## Crie seu Primeiro App Electron
|
|
|
|
|
|
|
|
Geralmente, um app Electron é estruturado assim:
|
|
|
|
|
|
|
|
```text
|
2015-11-30 21:14:33 +00:00
|
|
|
seu-app/
|
2015-10-07 17:11:58 +00:00
|
|
|
├── package.json
|
|
|
|
├── main.js
|
|
|
|
└── index.html
|
|
|
|
```
|
|
|
|
|
2015-11-30 21:14:33 +00:00
|
|
|
O formato de `package.json` é exatamente o mesmo que o dos módulos do Node,
|
2015-10-07 17:11:58 +00:00
|
|
|
e o script especificado pelo campo `main` é o script de inicialização do seu app,
|
|
|
|
que irá executar o processo principal. Um exemplo do seu `package.json` deve parecer
|
2015-10-07 17:24:09 +00:00
|
|
|
com isso:
|
2015-10-07 17:11:58 +00:00
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
2015-11-30 21:14:33 +00:00
|
|
|
"name" : "seu-app",
|
2015-10-07 17:11:58 +00:00
|
|
|
"version" : "0.1.0",
|
|
|
|
"main" : "main.js"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2015-11-30 21:14:33 +00:00
|
|
|
__Nota__: Se o campo `main` não estiver presente no `package.json`, o Electron irá
|
2015-10-07 17:11:58 +00:00
|
|
|
tentar carregar um `index.js`
|
|
|
|
|
|
|
|
O `main.js` deve criar as janelas e os manipuladores de eventos do sistema, um típico
|
|
|
|
exemplo:
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
var app = require('app'); // Módulo para controlar o ciclo de vida do app.
|
|
|
|
var BrowserWindow = require('browser-window'); // Módulo para criar uma janela nativa do browser.
|
|
|
|
|
|
|
|
// Mantenha uma referência global para o objeto window, se você não o fizer,
|
2015-11-18 01:37:45 +00:00
|
|
|
// a janela será fechada automaticamente quando o objeto JavaScript for
|
2015-10-07 17:11:58 +00:00
|
|
|
// coletado pelo garbage collector.
|
|
|
|
var mainWindow = null;
|
|
|
|
|
|
|
|
// Sair quando todas as janelas estiverem fechadas.
|
|
|
|
app.on('window-all-closed', function() {
|
2016-06-18 13:26:26 +00:00
|
|
|
// No macOS é comum para as aplicações na barra de menu
|
2015-10-07 17:11:58 +00:00
|
|
|
// continuarem ativas até que o usuário saia explicitamente
|
|
|
|
// com Cmd + Q
|
|
|
|
if (process.platform != 'darwin') {
|
|
|
|
app.quit();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// Esse método irá ser chamado quando o Electron finalizar
|
|
|
|
// a inicialização e estiver pronto para criar janelas do browser.
|
|
|
|
app.on('ready', function() {
|
|
|
|
// Criar a janela do navegador.
|
|
|
|
mainWindow = new BrowserWindow({width: 800, height: 600});
|
|
|
|
|
|
|
|
// e carrega o index.html do app.
|
2015-11-18 01:37:45 +00:00
|
|
|
mainWindow.loadURL('file://' + __dirname + '/index.html');
|
2015-10-07 17:11:58 +00:00
|
|
|
|
|
|
|
// Abre os DevTools.
|
|
|
|
mainWindow.openDevTools();
|
|
|
|
|
|
|
|
// Emitido quando a janela é fechada.
|
|
|
|
mainWindow.on('closed', function() {
|
|
|
|
// Desfaz a referência para o objeto window, normalmente você deverá
|
|
|
|
// guardar as janelas em um array se seu app suportar várias janelas,
|
|
|
|
// essa é a hora que você deverá deletar o elemento correspondente.
|
|
|
|
mainWindow = null;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
Finalmente o `index.html` é a página web que você quer mostrar:
|
|
|
|
|
|
|
|
```html
|
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
<title>Hello World!</title>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<h1>Hello World!</h1>
|
|
|
|
Nós estamos usando io.js <script>document.write(process.version)</script>
|
2016-04-30 01:35:02 +00:00
|
|
|
e Electron <script>document.write(process.versions.electron)</script>.
|
2015-10-07 17:11:58 +00:00
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
```
|
|
|
|
|
|
|
|
## Execute seu App
|
|
|
|
|
2015-11-30 21:14:33 +00:00
|
|
|
Uma vez que você criou seus arquivos `main.js`, `index.html`, e `package.json` iniciais,
|
|
|
|
você provavelmente vai querer tentar executar seu app localmente para testa-lo e ter
|
2015-10-07 17:11:58 +00:00
|
|
|
certeza que funciona como você espera.
|
|
|
|
|
|
|
|
### electron-prebuilt
|
|
|
|
|
|
|
|
Se você instalou `electron-prebuilt` globalmente com `npm`, então você irá precisar apenas
|
|
|
|
rodar o seguinte comando no diretório fonte do seu app:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
electron .
|
|
|
|
```
|
|
|
|
|
|
|
|
Se você o instalou localmente, então execute:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
./node_modules/.bin/electron .
|
|
|
|
```
|
|
|
|
|
|
|
|
### Binário do Electron Baixado Manualmente
|
|
|
|
|
|
|
|
Se você baixou o Electron manualmente, você pode também usar o binário incluído para
|
|
|
|
executar seu app diretamente.
|
|
|
|
|
|
|
|
#### Windows
|
|
|
|
|
|
|
|
```bash
|
2015-11-30 21:14:33 +00:00
|
|
|
$ .\electron\electron.exe seu-app\
|
2015-10-07 17:11:58 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
#### Linux
|
|
|
|
|
|
|
|
```bash
|
2015-11-30 21:14:33 +00:00
|
|
|
$ ./electron/electron seu-app/
|
2015-10-07 17:11:58 +00:00
|
|
|
```
|
|
|
|
|
2016-06-18 13:26:26 +00:00
|
|
|
#### macOS
|
2015-10-07 17:11:58 +00:00
|
|
|
|
|
|
|
```bash
|
2015-11-30 21:14:33 +00:00
|
|
|
$ ./Electron.app/Contents/MacOS/Electron seu-app/
|
2015-10-07 17:11:58 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
`Electron.app` aqui é uma parte do pacote de lançamento do Electron, você pode baixa-lo
|
2016-03-31 23:49:59 +00:00
|
|
|
[aqui](https://github.com/electron/electron/releases).
|
2015-10-07 17:11:58 +00:00
|
|
|
|
2015-10-07 21:57:43 +00:00
|
|
|
### Executar como uma distribuição
|
2015-10-07 17:11:58 +00:00
|
|
|
|
2015-11-18 01:37:45 +00:00
|
|
|
Depois de terminar seu app, você pode criar uma distribuição seguindo o guia
|
2015-11-30 21:14:33 +00:00
|
|
|
[Distribuição de aplicações](./application-distribution.md) e então executar o app
|
2015-10-07 17:11:58 +00:00
|
|
|
empacotado.
|