// package.json
{
"name": "mi-pwa-app",
"version": "1.0.0",
"description": "Mi PWA como aplicación de escritorio",
"main": "main.js",
"scripts": {
"start": "electron .",
"build": "electron-builder",
"pack": "electron-builder --dir",
"dist": "electron-builder"
},
"build": {
"appId": "com.miempresa.mipwa",
"productName": "Mi PWA App",
"directories": {
"output": "dist"
},
"files": [
"**/*",
"!node_modules",
"!src",
"!*.md"
],
"linux": {
"target": [
{
"target": "AppImage",
"arch": ["x64", "arm64"]
},
{
"target": "deb",
"arch": ["x64", "arm64"]
},
{
"target": "rpm",
"arch": ["x64", "arm64"]
}
],
"category": "Utility",
"icon": "assets/icon.png"
}
},
"devDependencies": {
"electron": "^latest",
"electron-builder": "^latest"
}
}
// main.js
const { app, BrowserWindow, Menu } = require('electron');
const path = require('path');
function createWindow() {
const mainWindow = new BrowserWindow({
width: 1200,
height: 800,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
enableRemoteModule: false,
webSecurity: true
},
icon: path.join(__dirname, 'assets/icon.png'),
titleBarStyle: 'default'
});
// Cargar la PWA desde URL o archivos locales
mainWindow.loadURL('https://tu-pwa-url.com');
// O cargar desde archivos locales si tienes los archivos de la PWA
// mainWindow.loadFile('app/index.html');
// Opcional: remover menu bar
Menu.setApplicationMenu(null);
// Manejar enlaces externos
mainWindow.webContents.setWindowOpenHandler(({ url }) => {
require('electron').shell.openExternal(url);
return { action: 'deny' };
});
}
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
// Configuración adicional para PWA
app.on('web-contents-created', (event, contents) => {
contents.on('new-window', (navigationEvent, url) => {
navigationEvent.preventDefault();
require('electron').shell.openExternal(url);
});
});