Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs

Início rápido com Electron usando React

Nesta página

  • Visão geral
  • Configurar
  • Crie seu aplicativo React
  • Remova a dependência do web-vitals
  • Instale o CRACO para alterar sua configuração do Webpack
  • Criar um arquivo de configuração CRACO
  • Instalar Electron
  • Crie seu arquivo de processo principal do Electron
  • Execute seu aplicativo
  • Instalar Realm
  • Abrir um Realm

Esta página contém informações para integrar o Realm ao seu aplicação Electron rapidamente, desenvolvendo um aplicação usando Create React App.

Antes de começar, verifique se tem:

Observação

Requisito de versão - Electron

Realm funciona com qualquer uma das versões elétricas oficialmente suportadas. No entanto, como o Electron muda constantemente a cada atualização, recomendamos o uso do Electron versão 13.2.x para compatibilidade com esta documentação. Para ver as versões eletrônicas oficialmente compatíveis, consulte as Lançamentos eletrônicos documento.

Observação

Requisitos da versão - React.js

Este guia foi criado com suporte para React.js versão 17.0 e crie 4 o React App versão .0. Versões diferentes dessas podem levar a erros durante a criação do aplicativo, pois novas dependências são frequentemente adicionadas ao React.js e ao Create React App.

Para configurar um aplicativo eletrônico usando o Realm, use as seguintes instruções:

1

Organize seu aplicativo usando a cadeia de ferramentas Create React App . Digite o seguinte comando em seu terminal:

npx create-react-app my_electron_react_application

Seu aplicativo deve incluir os seguintes arquivos. Alguns arquivos adicionais em seu projeto, como CSS, trabalhador de serviço e arquivos de teste não estão incluídos abaixo.

.
|-- package.json
|-- package-lock.lock
|-- public
| |-- index.html
|-- src
| |-- App.js // renderer process
|-- |-- index.js // renderer process

Qualquer arquivo JS dentro do diretório src é executado em um renderer process.

Observação

Cada aplicativo Electron só pode ter um processo principal. O processo principal cria páginas da web. Cada página da web é executada em seu próprio processo, conhecido como processo de renderização. Para saber mais sobre isso, leia o Modelo de Processo Eletrônico oficial doc.

2

Create React App versão 4.0+ inclui o web-vitals módulo. Como o 'web-vitals' foi projetado para funcionar com a Web e não com um ambiente Electron, a inclusão desse módulo pode levar a um erro "chunk runtime-main [entry] Cannot convert undefined or null to object" ao construir o aplicativo. Para evitar esse erro, execute o seguinte comando para desinstalar o pacote web-vitals .

npm uninstall web-vitals

Em seguida, exclua o arquivo reportWebVitals.js:

rm src/reportWebVitals.js

Por fim, remova as seguintes linhas do arquivo src/index.js:

import reportWebVitals from './reportWebVitals';
reportWebVitals();
3

Para permitir que seu aplicativo funcione corretamente com o Electron, você precisa alterar a configuração do webpack. Por padrão, aplicativos criados via create-react-app usam um arquivo de webpack pré-configurado e oculto para o usuário final. A configuração padrão Create React App webpack não é compatível com Realm e você deve substituí-la. Você pode usar o CRACO para substituir esses valores padrão. Instale o CRACO com o seguinte comando:

npm install @craco/craco
4

Para substituir os valores do webpack pré-configurados, crie um arquivo de configuração CRACO chamado craco.config.js na raiz do seu aplicativo. Adicione o seguinte a este arquivo:

const nodeExternals = require("webpack-node-externals");
module.exports = {
webpack: {
configure: {
target: "electron-renderer",
externals: [
nodeExternals({
allowlist: [/webpack(\/.*)?/, "electron-devtools-installer"],
}),
],
},
},
};

O alvo está definido como " electron-renderer " para compilar seu aplicativo para ambientes de navegador para módulos integrados do Electron. O nodeExternals também é especificado para evitar que todos os node_modules sejam agrupados. A chave allowList no objeto passado para nodeExternals especifica uma lista de módulos a serem incluídos no pacote – no caso, as ferramentas de desenvolvimento do Electron e o Webpack. Para usar webpack-node-externals, execute o seguinte comando:

npm install webpack-node-externals --save-dev
5

Para adicionar Electron ao seu projeto, execute o seguinte comando:

npm install electron --save-dev
6

O arquivo Electron main process pode ser considerado o ponto de entrada em seu aplicativo. Este arquivo é responsável por carregar o arquivo index.html do React App no BrowserWindow criado pela Electron.

Observação

Cada aplicativo Electron só pode ter um processo principal. O processo principal pode criar páginas da web. Cada página da Web é executada em seu próprio processo, conhecido como processo de renderização. Para saber mais sobre isso, leia o documento oficial do Electron Process Model.

Adicione o seguinte código a um novo arquivo denominado electron.js no diretório public:

const electron = require("electron");
const path = require("path");
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
let mainWindow;
function createWindow() {
// Create the browser window.
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: { nodeIntegration: true, contextIsolation: false },
});
// and load the index.html of the app.
console.log(__dirname);
mainWindow.loadFile(path.join(__dirname, "../build/index.html"));
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on("ready", createWindow);

Seu aplicativo agora deve incluir os seguintes arquivos. Alguns arquivos adicionais em seu projeto, como CSS, trabalhador de serviço e arquivos de teste não estão incluídos abaixo.

.
|-- package.json
|-- package-lock.lock
|-- craco.config.js
|-- public
| |-- index.html
| |-- electron.js // main process
|-- src
| |-- App.js // renderer process
|-- |-- index.js // renderer process

Todos os arquivos JS no diretório src são executados no processo renderer . O Electron.js e quaisquer arquivos exigidos por ele são executados no processo principal.

7

Para executar a sua aplicação, especifique uma página inicial e um ponto de entrada principal para Electron adicionando o seguinte ao seu ficheiro package.json :

"main": "public/electron.js",
"homepage": "./",

Por fim, adicione os seguintes scripts ao seu arquivo package.json:

"scripts": {
"build": "craco build",
"start": "electron ."
},

No seu terminal, execute npm run build e, em seguida, npm run start. Você deve ver o seguinte:

Aplicação Electron com React para o desktop
8

No terminal, use o seguinte comando para adicionar Realm ao seu projeto:

npm install realm

Use domínio no processo de renderização adicionando o seguinte ao topo do arquivo src/App.js (você também precisará importá-lo em qualquer arquivo em que escrever código usando Realm):

import Realm from "realm";

Autentique um usuário, defina um esquema e sincronize o Device Sync habilitado e, em seguida, chame Realm.open() em um arquivo para o qual você importou o Realm.

Depois de abrir o domínio, você pode escrever no domínio.

const app = new Realm.App({ id: "<Your App ID>" }); // create a new instance of the Realm.App
async function run() {
// login with an anonymous credential
await app.logIn(Realm.Credentials.anonymous());
const DogSchema = {
name: "Dog",
properties: {
_id: 'int',
name: "string",
age: "int",
},
primaryKey: '_id'
};
const realm = await Realm.open({
schema: [DogSchema],
sync: {
user: app.currentUser,
partitionValue: "myPartition",
},
});
// The myPartition realm is now synced to the device. You can
// access it through the `realm` object returned by `Realm.open()`
// write to the realm
}
run().catch(err => {
console.error("Failed to open realm:", err)
});

Observação

Para obter um exemplo de gravação em um domínio a partir dos processos renderer e main , confira o repositório domínio-electron-advanced-quickstart .

Observação

Os binários nativos de reação atuais estão incluídos no pacote realm. Você pode remover os binários e o diretório react-native da construção. Em seu arquivo package.json, adicione uma entrada build.files e defina seu valor para !**/node_modules/realm/react-native.

Dica

Veja também:

Próximo

Bem-vindo aos Docs do Atlas Device SDK