DEV Community

Olyno
Olyno

Posted on

5 2

Comment créer une application Electron avec vite

Note: This article is available in English here

Pouvoir créer un logiciel avec Electron ce n'est pas si compliqué. Pleins de boilerplates existent, la documentation est très bien...
Cependant, je n'ai rien trouvé qui explique comment créer un projet Electron avec Vite. Alors, allons droit au but.

Créer l'application Vite par défaut

Pour cela rien de plus simple. Je me baserais sur Yarn pour mes installation. A l'aide de la commande:

yarn create vite
Enter fullscreen mode Exit fullscreen mode

Il suffit de rajouter le nom de notre projet (dans notre cas "electron-vite"), et de choisir un framework (dans notre cas "Svelte").

Nous allons ensuite dans le dossier de notre projet et installons nos dépendances:

cd electron-vite
yarn install
Enter fullscreen mode Exit fullscreen mode

Installer le builder

Le builder nous permettra de créer l'application finale et de déployer le logiciel en production. Nous utiliserons Electron Forge.
Nous pouvons l'installer avec la commande suivante :

yarn add --dev @electron-forge/cli
Enter fullscreen mode Exit fullscreen mode

Une fois le CLI de la forge installé, il ne nous reste plus qu'à le configurer. Heureusement pour nous, Electron Forge s'occupe de tout. Il ne nous reste plus qu'à l'exécuter:

yarn electron-forge import
Enter fullscreen mode Exit fullscreen mode

Et les différents scripts seront ajoutés à notre fichier package.json

Editons le package.json

Ils nous restent encore quelques dépendances à installer:

concurrently # Pour lancer Vite et Electron en même temps
cross-env    # Pour pouvoir définir un environnement au lancement
Enter fullscreen mode Exit fullscreen mode

Pour les installer, on aura juste à faire:

yarn add -D concurrently cross-env
Enter fullscreen mode Exit fullscreen mode

Maintenant que nous avons toutes les dépendances installées, nous avons plus qu'à setup les différents scripts:

"scripts": {
  "start": "npm run build && npm run electron:start",
  "dev": "concurrently -k \"vite\" \"npm run electron:dev\"",
  "build": "vite build",
  "preview": "vite preview",
  "electron:dev": "cross-env IS_DEV=true electron-forge start",
  "electron:build": "electron-forge make",
  "electron:package": "electron-forge package"
},
Enter fullscreen mode Exit fullscreen mode

Vous pouvez modifier les yarn par npm run dans les différents scripts

La variable d'environnement IS_DEV peut bien entendu être renommé en NODE_ENV par exemple.

Il nous manque 3 champs à rajouter/modifier:

"main": "app/index.js",
"description": "Boilerplate Electron + Vite + Svelte",
"license": "MIT",
Enter fullscreen mode Exit fullscreen mode

Le champs main sera le point d'entrée de notre application Electron.

Les champs description et license sont nécessaire pour pouvoir build Electron avec Electron Forge.

Editons la config de vite

Rien de bien compliqué. Il faudra dans un premier temps que l'on modifie la base de notre application. Si l'application part en production, alors nous allons chercher de façon relative les fichiers à importer (comme les assets). Puis, on aura juste à modifier le dossier de build afin qu'il soit relié à notre application Electron.

import { svelte } from '@sveltejs/vite-plugin-svelte';
import { defineConfig } from 'vite';

// https://vitejs.dev/config/
export default defineConfig({
  base: process.env.IS_DEV !== 'true' ? './' : '/',
  build: {
    outDir: 'app/build',
  },
  plugins: [svelte()],
});
Enter fullscreen mode Exit fullscreen mode

On setup Electron

Pour créer notre application Electron, on a juste à créer un fichier app/index.js qui contiendra le code par défaut d'Electron:

// app/index.js
const path = require('path');
const { app, BrowserWindow } = require('electron');

// Handle creating/removing shortcuts on Windows when installing/uninstalling.
if (require('electron-squirrel-startup')) {
  app.quit();
}

const isDev = process.env.IS_DEV === 'true';

function createWindow() {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true,
    },
  });

  // Open the DevTools.
  if (isDev) {
    mainWindow.loadURL('http://localhost:3000');
    mainWindow.webContents.openDevTools();
  } else {
    // mainWindow.removeMenu();
    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.whenReady().then(() => {
  createWindow();
  app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});
Enter fullscreen mode Exit fullscreen mode

Dans le code ci-dessus, il y a 2 choses à noter:

  1. Le code suivant est nécessaire si vous souhaitez build votre application avec "squirrel" (un model de build pour Windows).
if (require('electron-squirrel-startup')) {
  app.quit();
}
Enter fullscreen mode Exit fullscreen mode
  1. Concernant la façon de récupérer le contenu:
if (isDev) {
  mainWindow.loadURL('http://localhost:3000');
  mainWindow.webContents.openDevTools();
} else {
  // mainWindow.removeMenu(); // Optionnel
  mainWindow.loadFile(path.join(__dirname, 'build', 'index.html'));
}
Enter fullscreen mode Exit fullscreen mode

Si nous sommes en train de dev, nous allons juste charger une url qui sera celle de Vite. Par contre si nous avons build notre application pour la production, alors nous aurons besoin de récupérer le fichier index.html directement.

Enfin, il nous suffit de créer un fichier app/preload.js.

Electron ne supporte pas encore les syntaxes esm, et donc par conséquent, nous allons utiliser le require

On modifie le fichier de config de Svelte

Alors oui, même si notre application est en soit fini, Electron ne supportant pas les syntaxes esm, nous devons modifier les imports/export en require/module:

// svelte.config.js

const sveltePreprocess = require('svelte-preprocess');

module.exports = {
  // Consult https://github.com/sveltejs/svelte-preprocess
  // for more information about preprocessors
  preprocess: sveltePreprocess(),
};
Enter fullscreen mode Exit fullscreen mode

Et voilà, vous venez de créer votre logiciel avec Vite et Electron ! Le livereload fonctionne parfaitement, que demander de mieux !

Vous pouvez retrouver le repository ici: https://github.com/frontend-templates-world/svelte-ts-electron-vite

Sentry blog image

How to reduce TTFB

In the past few years in the web dev world, we’ve seen a significant push towards rendering our websites on the server. Doing so is better for SEO and performs better on low-powered devices, but one thing we had to sacrifice is TTFB.

In this article, we’ll see how we can identify what makes our TTFB high so we can fix it.

Read more

Top comments (0)

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay