diff --git a/README.md b/README.md index 15cd0c3..e2bcabb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Wrapper de Electron para empaquetar una instalación de NodeCG que incluya el bundle `scoreko-dev`, inspirado en `opeik/runback-electron` pero actualizado a Electron + TypeScript moderno. -Por defecto, el wrapper arranca NodeCG con **Node del sistema** (`node`), pensado para que uses Node 22 de forma consistente en todo el stack. +Este wrapper está pensado para funcionar **standalone**: por defecto NodeCG corre con el **Node interno de Electron** (no requiere Node instalado en la máquina final). ## Qué hace @@ -42,13 +42,15 @@ cd ../.. > Si no haces `npm install` dentro de `lib/nodecg`, verás errores como `Cannot find module ... node_modules/nodecg/dist/server/bootstrap.js`. +## ¿Existe Electron con Node 22 para standalone? -## Error típico: NODE_MODULE_VERSION (Node 22 vs Electron Node 20) +Sí. Este proyecto usa Electron `35.x`, que permite mantener un runtime moderno y ejecutar NodeCG con el Node embebido de Electron para app standalone. + +## Error típico: NODE_MODULE_VERSION Si ves un error como `better-sqlite3 ... NODE_MODULE_VERSION`, tienes módulos nativos compilados para una versión distinta de Node. -1. Entra a `lib/nodecg`. -2. Reinstala/recompila dependencias nativas: +En ese caso recompila dentro de `lib/nodecg` con el runtime objetivo: ```bash cd lib/nodecg @@ -56,30 +58,23 @@ npm install npm rebuild better-sqlite3 --update-binary ``` -3. Si persiste, elimina `node_modules` del workspace que falla y vuelve a instalar. +Si sigues en modo standalone (default), asegúrate de no mezclar binarios compilados con otro Node fuera de tu versión de Electron. +## Runtime de NodeCG -## Runtime de NodeCG (Node 22 recomendado) +Por defecto (standalone): +- `NODECG_USE_SYSTEM_NODE=false` -Por defecto: +Opcionalmente, puedes forzar Node del sistema: - `NODECG_USE_SYSTEM_NODE=true` - `NODECG_NODE_BINARY=node` -Así NodeCG se ejecuta con tu Node del sistema (recomendado: Node 22). - -Ejemplo en PowerShell para forzar Node 22: +Ejemplo en PowerShell para usar Node del sistema (si lo necesitas): ```powershell $env:NODECG_USE_SYSTEM_NODE="true" $env:NODECG_NODE_BINARY="C:\Program Files\nodejs\node.exe" -node -v # debería mostrar v22.x -npm run dev -``` - -Si quieres volver al Node interno de Electron: - -```powershell -$env:NODECG_USE_SYSTEM_NODE="false" +node -v npm run dev ``` @@ -92,17 +87,9 @@ Estas variables se leen en `src/main/main.ts`. - `SCOREKO_DASHBOARD_ROUTE` (default: `dashboard/index.html`) - `ELECTRON_LOAD_DELAY_MS` (default: `2500`) - `NODECG_STARTUP_TIMEOUT_MS` (default: `30000`) -- `NODECG_USE_SYSTEM_NODE` (default: `true`) +- `NODECG_USE_SYSTEM_NODE` (default: `false`) - `NODECG_NODE_BINARY` (default: `node`) -Ejemplo (PowerShell): - -```powershell -$env:NODECG_PORT="9191" -$env:NODECG_BUNDLE_NAME="scoreko-dev" -npm run dev -``` - ## Scripts - `npm run dev`: modo desarrollo (watch + relanzado de Electron). diff --git a/package-lock.json b/package-lock.json index 9dabef8..cf6bf41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,14 +14,14 @@ "devDependencies": { "@types/node": "^22.10.5", "concurrently": "^9.1.2", - "electron": "^34.2.0", + "electron": "^35.7.5", "electron-builder": "^25.1.8", "rimraf": "^6.0.1", "typescript": "^5.7.3", "wait-on": "^8.0.1" }, "engines": { - "node": ">=20" + "node": ">=22" } }, "node_modules/@develar/schema-utils": { @@ -2375,15 +2375,15 @@ } }, "node_modules/electron": { - "version": "34.5.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-34.5.8.tgz", - "integrity": "sha512-vxLD65mabTzYmEVa9KceMHM0+zO+vqgrhcyNVlmTd0IGV5J7XZ8v/qElm0o4YQ4wPeq7olZkUjZkBQQEdr23/g==", + "version": "35.7.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-35.7.5.tgz", + "integrity": "sha512-dnL+JvLraKZl7iusXTVTGYs10TKfzUi30uEDTqsmTm0guN9V2tbOjTzyIZbh9n3ygUjgEYyo+igAwMRXIi3IPw==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", + "@types/node": "^22.7.7", "extract-zip": "^2.0.1" }, "bin": { @@ -2566,16 +2566,6 @@ "node": ">= 10.0.0" } }, - "node_modules/electron/node_modules/@types/node": { - "version": "20.19.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", - "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", diff --git a/package.json b/package.json index 5a47400..c4853ad 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "devDependencies": { "@types/node": "^22.10.5", "concurrently": "^9.1.2", - "electron": "^34.2.0", + "electron": "^35.7.5", "electron-builder": "^25.1.8", "rimraf": "^6.0.1", "typescript": "^5.7.3", diff --git a/src/main/main.ts b/src/main/main.ts index 130d533..b1b70a1 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -9,7 +9,7 @@ const DEFAULT_BUNDLE_NAME = process.env.NODECG_BUNDLE_NAME ?? "scoreko-dev"; const DEFAULT_DASHBOARD_ROUTE = process.env.SCOREKO_DASHBOARD_ROUTE ?? "dashboard/index.html"; const LOAD_DELAY_MS = Number.parseInt(process.env.ELECTRON_LOAD_DELAY_MS ?? "2500", 10); const STARTUP_TIMEOUT_MS = Number.parseInt(process.env.NODECG_STARTUP_TIMEOUT_MS ?? "30000", 10); -const USE_SYSTEM_NODE = (process.env.NODECG_USE_SYSTEM_NODE ?? "true").toLowerCase() !== "false"; +const USE_SYSTEM_NODE = (process.env.NODECG_USE_SYSTEM_NODE ?? "false").toLowerCase() === "true"; const NODE_BINARY = process.env.NODECG_NODE_BINARY ?? "node"; const isDev = !app.isPackaged; @@ -135,7 +135,7 @@ function enrichNodeCGFailureMessage(baseMessage: string): string { "Detectado error de módulos nativos compilados para otra versión de Node (NODE_MODULE_VERSION).", USE_SYSTEM_NODE ? "Estás en modo Node del sistema: asegúrate de lanzar con Node 22 y recompilar dependencias nativas." - : "Estás en modo Node de Electron: alinea versiones o cambia NODECG_USE_SYSTEM_NODE=true.", + : "Estás en modo standalone (Node interno de Electron). Reinstala/rebuild de dependencias con esta versión de Electron.", "", "Solución recomendada (en lib/nodecg):", " 1) npm install",