mirror of
https://github.com/Pandipipas/scoreko-electron-dev.git
synced 2026-06-06 05:32:06 +00:00
Merge pull request #4 from Pandipipas/create-electron-wrapper-for-scoreko-dev-qehywe
Codex-generated pull request
This commit is contained in:
@@ -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).
|
||||
|
||||
Generated
+6
-16
@@ -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",
|
||||
|
||||
+1
-1
@@ -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",
|
||||
|
||||
+2
-2
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user