This is an old revision of the document!
Guida operativa per creare applicazioni npm desktop con Electron, Vite ed electron-builder
Base di partenza: configurazione `package.json` in stile LibrePM
1. Scopo della guida
Questa guida spiega come usare una configurazione npm + Electron + Vite + electron-builder simile a quella del progetto LibrePM per creare nuove applicazioni desktop che:
si sviluppano con tooling npm moderno
usano una UI web locale renderizzata in Electron
generano build desktop multipiattaforma
producono anche pacchetti .deb installabili su Debian/Ubuntu e derivate in modo ordinato
possono includere anche risorse esterne, ad esempio un backend `.jar`, binari, template, file statici o altri asset di runtime
L’obiettivo non è solo “far partire Electron”, ma usare una struttura replicabile per nuovi progetti con una pipeline di build pulita, comprensibile e pronta per crescere.
2. Cosa fa questa configurazione e perché è una buona base
Il `package.json` di LibrePM implementa una pipeline molto concreta:
Vite costruisce il frontend
Electron avvia l’app desktop
electron-builder impacchetta l’app per macOS, Windows e Linux
la build desktop include anche risorse extra esterne al bundle frontend
su Linux sono esplicitati i target `AppImage`, `snap` e `deb` (è possibile il `flatpak` ma non è molto stabile)
per Linux viene personalizzato anche il blocco `desktop`, utile per il file `.desktop` così da permettere l'inserimento di icone e altri oggetti utili alla build
in LibrePM la build completa lancia prima il backend Java con `gradlew bootJar`, poi il frontend Vite, poi il packaging Electron
NOTA BENE: il backend Java può essere sostituito con uno Python/Go/altri linguaggi a scelta, purché si espliciti nel pacchetto e si includa poi tutto il necessario
In pratica è una soluzione ideale quando vuoi costruire una desktop app npm-based ma con capacità più enterprise rispetto a una semplice web app.
3. Anatomia della configurazione
Di seguito i punti più importanti della configurazione di partenza e il loro significato operativo
```json
{
"name": "nometuaapp-desktop",
"version": "0.1.0",
"description": "NomeTuaApp - Descrizione",
"type": "module",
"main": "electron/main.cjs"
}
```
Perché conta
`name` influenza il nome tecnico del pacchetto
`version` viene usata anche negli artefatti prodotti
`description` aiuta packaging e identificazione
`type: “module”` abilita l’uso di ESM nel progetto Node lato tooling
`main` indica l’entrypoint Electron principale
Nota importante
In questa configurazione il progetto usa ESM a livello package ma il processo principale Electron è in CommonJS con file `.cjs`
È una scelta pratica e sensata quando vuoi:
tooling moderno lato frontend
meno attrito nel bootstrap Electron
compatibilità elevata con dipendenze e script di runtime
4. Gli script che rendono la pipeline riusabile
Script presenti
```json
"scripts": {
"dev": "concurrently -k \"vite --host 127.0.0.1\" \"wait-on http://127.0.0.1:5173 && electron .\"",
"dev:renderer": "vite",
"dev:electron": "wait-on http://localhost:5173 && electron .",
"build": "vite build",
"dist": "cd .. && ./gradlew bootJar && cd desktop && vite build && electron-builder",
"preview": "vite preview"
}
```