Electron.js: conoce el framework JS para aplicaciones de escritorio

Curso de Electron: Apps de escritorio en Windows y Mac

Toma las primeras clases gratis

COMPARTE ESTE ARTÍCULO Y MUESTRA LO QUE APRENDISTE

Electron.js es una plataforma para desarrollar aplicaciones de escritorio usando tecnologías web (HTML, CSS y JavaScript) creada y mantenida por Github. Electron.js funciona creando dos tipos de procesos, el proceso main y el proceso renderer. El primero es un proceso de Node.js, este es nuestro proceso principal, viene a ser nuestra aplicación en si misma, este proceso tiene acceso a varias API de Electron.js solo para este proceso que nos ayudan a comunicarnos con el SO y realizar distintas acciones o efectos.

El segundo (renderer) es un proceso de Chromium, con una diferencia, este Chromium tiene un Node.js incorporado y acceso a todos sus módulos y los que instalemos con npm (esto nos permitiría usar React.js, Angular.js, Polymer, etc. para desarrollar nuestra UI o cualquier otra librería básicamente), por lo que desde nuestrorenderer podemos usar módulos como fs para leer y escribir en el disco, o hacer peticiones a una base de datos directamente.

Además de acceder a los módulos de Node.js y npm, Electron.js nos da acceso a una pocas API en este proceso igual que hace con el procesomain.

electron-process

Desarrollando una aplicación

Para empezar a usar Electron.js lo primero que necesitamos es iniciar un proyecto con npm init e instalar la dependencia de desarrolloelectron-prebuilt. Esta dependencia nos permite iniciar nuestra aplicación de Electron.js con el comando electron .. Veamos como quedaría nuestro package.json luego de instalar todo:

{
	"name": "my-app",
	"version": "0.1.0",
	"description": "My first Electron.js application",
	"main": "app/index.js",
	"scripts": {
		"start": "electron ."
	},
	"devDependencies": {
		"electron-prebuilt": "1.3.3"
	}
}

Ahí tenemos nuestra dependencia de desarrollo instalada y el scriptstart que inicia la aplicación, también definimos que el entry point de nuestra aplicación va a ser el archivo index.js ubicado en la carpetaapp. Vamos entonces a crear este archivo y dentro vamos a colocar lo siguiente:

// de electron nos traemos app y BrowserWindow
const { app, BrowserWindow } = require('electron');

// definimos `window`, acá vamos a guardar la instancia de BrowserWindow actual
letwindow;

// cuando nuestra app haya terminado de iniciar va a disparar el evento `ready`
// lo escuchamos y ejecutamos la función `createWindow`
app.on('ready', createWindow);

// escuchamos el evento `window-all-closed` y si no estamos en Mac cerramos la aplicación
// lo de Mac es debido a que en este SO es común que se pueda cerrar todas las ventanas sin cerrar
// la aplicación completa
app.on('window-all-closed', () => {
	if (process.platform !== 'darwin') {
		app.quit();
	}
});

// definimos la función `createWindow`
functioncreateWindow() {
	// instanciamos BrowserWindow, esto va a iniciar un proceso `renderer`
	window = new BrowserWindow({
		height: 768,
		width: 1024,
	});

	// le decimos a nuestro `renderer` que cargue un archivo que tenemos en `statics/index.html`
	// acá podríamos cargar cualquier URL, por ejemplo podríamos haber iniciado un servidor HTTP
	// y luego cargar la URL de este servidor
	window.loadURL(`file://${__dirname}/../statics/index.html`);

	window.on('closed', () => {
		// por último escuchamos el evento `closed` de la ventana para limpar la variable `window`
		// de esta forma permitimos matar la ventana sin matar al aplicación
		window = null
	});
}

Ese archivo va a ser nuestro proceso main (nuestra aplicación), cuando iniciemos Electron.js con el comando npm start vamos a iniciar este script, crear una ventana y abrir el archivostatics/index.html. Ya que tenemos todo esto, vamos a crear el HTML que vamos a cargar.


<htmllang="en">
<head>
	<metacharset="utf-8">
	<metaname="viewport"content="width=device-width, initial-scale=1">
	<title>Nuestra aplicación de Electron.jstitle>
head>
<body>
	<mainid="app-container">
		<header>
			<h1>Acabo de iniciar una app de Electron.jsh1>
		header>
	main>
body>
html>

Ese va a ser nuestro HTML inicial, ahora cuando iniciemos Electron.js vamos a ver una ventana en blanco con el mensaje: Acabo de iniciar una app de Electron.js Ahora vamos a incluir un poco de JS en el renderer y vamos hacer uso del módulo fs (directo en la ventana). Vamos a incluir una etiqueta script con el siguiente código: