Docs Menu
Docs Home
/ /
SDK de dispositivos Atlas

Inicio rápido con Electron usando React

This page contains information to get Realm integrated into your Electron application quickly by developing an application using Create React App.

Antes de comenzar, asegúrese de tener:

Nota

Requisitos de versión - Electron

Realm funciona con cualquiera de las versiones de Electron oficialmente compatibles. Sin embargo, dado que Electron cambia constantemente con cada actualización, recomendamos usar 13.2 la versión.x de Electron para garantizar la compatibilidad con esta documentación. Para ver las versiones de Electron oficialmente compatibles, consulte el documento de versiones de Electron.

Nota

Requisitos de versión - React.js

Esta guía se creó con compatibilidad con la versión de React.js 17.0 y la versión 4 de Create React App.0 Versiones diferentes a estas pueden generar errores durante la compilación de la aplicación, ya que se agregan nuevas dependencias con frecuencia tanto a React.js como a Create React App.

Para configurar una aplicación de Electron usando Realm, siga las siguientes instrucciones:

1

Desarrolla tu aplicación con la cadena de herramientas "Crear aplicación React". Introduce el siguiente comando en tu terminal:

npx create-react-app my_electron_react_application

Su aplicación debe incluir los siguientes archivos. Algunos archivos adicionales de su proyecto, como CSS, service workers y archivos de prueba, no se incluyen a continuación.

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

Any JS file within the src directory executes on a renderer process.

Nota

Cada aplicación Electron solo puede tener un proceso principal. Este proceso crea páginas web. Cada página web se ejecuta en su propio proceso, conocido como proceso renderizador. Para obtener más información, consulte la documentación oficial del Modelo de Proceso de Electron.

2

La versión + de Create React 4.0 App incluye el módulo web-vitals. Dado que "web-vitals" está diseñado para funcionar con la web en lugar de con un entorno Electron, la inclusión de este módulo puede provocar un "chunk runtime-main [entry] Cannot convert undefined or null to object" error al compilar la aplicación. Para evitar este error, ejecute el siguiente comando para desinstalar el web-vitals paquete.

npm uninstall web-vitals

Luego borra el archivo reportWebVitals.js:

rm src/reportWebVitals.js

Por último, remueve las siguientes líneas del archivo src/index.js:

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

Para que tu aplicación funcione correctamente con Electron, debes modificar la configuración de webpack. De forma predeterminada, las aplicaciones creadas mediante create-react-app usan un archivo webpack preconfigurado y oculto para el usuario final. La configuración predeterminada de webpack de Create React App no ​​es compatible con Realm y debes sobrescribirla. Puedes usar CRACO para sobrescribir estos valores predeterminados. Instala CRACO con el siguiente comando:

npm install @craco/craco
4

Para anular los valores preconfigurados del paquete web, cree un archivo de configuración de CRACO llamado craco.config.js en la raíz de su aplicación. Añada lo siguiente a este archivo:

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

El target se establece en "electron-renderer" para compilar tu aplicación para entornos de navegador para los módulos de funcionalidad incorporada de Electron. nodeExternals también se especifica para evitar que todos los node_modules se incluyan en el paquete. La clave allowList en el objeto pasado a nodeExternals especifica una lista de módulos a incluir en el paquete, en este caso, las herramientas de desarrollo de electron y webpack. Para utilizar webpack-node-externals, ejecutar el siguiente comando:

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

Para agregar Electron a su proyecto, ejecute el siguiente comando:

npm install electron --save-dev
6

El archivo main process de Electron puede considerarse el punto de entrada a tu aplicación. Este archivo es responsable de cargar el archivo index.html de tu aplicación React en el archivo BrowserWindow creado por Electron.

Nota

Cada aplicación Electron solo puede tener un proceso principal. Este proceso puede crear páginas web. Cada página web se ejecuta en su propio proceso, conocido como proceso renderizador. Para obtener más información, consulte la documentación oficial del Modelo de Proceso de Electron.

Agregue el siguiente código a un nuevo archivo llamado electron.js en el directorio 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);

Tu aplicación debería incluir ahora los siguientes archivos. Algunos archivos adicionales del proyecto, como CSS, service workers y archivos de prueba, no se incluyen a continuación.

.
|-- 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 los archivos JS del directorio src se ejecutan en el proceso renderer. El archivo electron.js y cualquier archivo que requiera se ejecutan en el proceso principal.

7

Para ejecutar su aplicación, especifique una página de inicio y un punto de entrada principal para Electron agregando lo siguiente a su archivo package.json:

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

Por último, agregue los siguientes scripts a su archivo package.json:

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

En tu terminal, ejecuta npm run build y luego npm run start. Deberías ver lo siguiente:

Electron Desktop App with React
8

En su terminal, use el siguiente comando para agregar Realm a su proyecto:

npm install realm@12

Utilice realm en el proceso de renderizado agregando lo siguiente en la parte superior del src/App.js archivo (también deberá importarlo en cualquier archivo en el que escriba el código utilizando Realm):

import Realm from "realm";

Autentica un usuario, define un esquema y sincroniza la sincronización de dispositivos habilitada, luego llama a Realm.open() en un archivo en el que hayas importado Realm.

Una vez que hayas abierto el reino, podrás escribir en él.

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)
});

Nota

Para ver un ejemplo de cómo escribir en un reino desde renderer main los procesos y, consulte el repositorio realm-electron-advanced-quickstart.

Nota

Los binarios actuales de React Native están incluidos en el paquete realm. Puedes eliminar los binarios y el directorio react-native de la compilación. En tu archivo package.json, añade una entrada build.files y establece su valor en !**/node_modules/realm/react-native.

Tip

Next

Bienvenido a la Docs de Atlas Device SDK

En esta página