Я пытаюсь построить настольный компьютер Electron JS из проекта FastApi React.js, и окно не покажет, что приложение рабоJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Я пытаюсь построить настольный компьютер Electron JS из проекта FastApi React.js, и окно не покажет, что приложение рабо

Сообщение Anonymous »

Мне нужно понять, что вызывает это и как я могу рефакторировать, особенно после сборки. NPM Start работает хорошо. Мой двоичный файл Fastapi работает правильно изнутри упакованного аппетита! Похоже, что после строительства, хотя Fastapi живет, электрон может молча сработать при попытке загрузить ('http: // localhost: 8000'). Это мой main.js;
const path = require('path');
const { spawn } = require('child_process');
const waitOn = require('wait-on');

let mainWindow;
let backendProcess;

function createWindow() {
console.log("Creating Electron window...");

mainWindow = new BrowserWindow({
width: 1200,
height: 800,
autoHideMenuBar: true,
webPreferences: {
nodeIntegration: false,
contextIsolation: true
},
icon: path.join(__dirname, 'icon.png')
});

const targetURL = 'http://localhost:8000';

console.log("Waiting 1s to ensure backend is really ready...");
setTimeout(() => {
console.log(`Attempting to load: ${targetURL}`);
mainWindow.loadURL(targetURL).catch(err => {
console.error("❌ Failed to load frontend URL:", err);
dialog.showErrorBox("Frontend Load Error", `Could not load: ${targetURL}\n\n${err.message}`);
});
}, 1000); // Delay 1 second just in case
}

function getBackendPath() {
const backendName = process.platform === 'win32' ? 'flexiweigh.exe' : 'flexiweigh';
const basePath = app.isPackaged ? process.resourcesPath : __dirname;
const fullPath = path.join(basePath, backendName);
console.log(`Resolved backend path: ${fullPath}`);
return fullPath;
}

function startBackend() {
const backendPath = getBackendPath();

console.log(`🚀 Starting backend: ${backendPath}`);

backendProcess = spawn(backendPath, [], {
stdio: 'pipe',
env: process.env
});

backendProcess.on('error', (err) => {
console.error('❌ Backend failed to start:', err);
dialog.showErrorBox('Backend Error', `Could not start backend: ${err.message}`);
app.quit();
});

backendProcess.on('exit', (code, signal) => {
console.log(`⚠️ Backend exited with code ${code} (signal: ${signal})`);
if (code !== 0) {
dialog.showErrorBox('Backend Crashed', `Backend exited with code ${code}`);
app.quit();
}
});

if (backendProcess.stdout) {
backendProcess.stdout.on('data', (data) => {
console.log(`📥 Backend stdout: ${data}`);
});
}

if (backendProcess.stderr) {
backendProcess.stderr.on('data', (data) => {
console.error(`📤 Backend stderr: ${data}`);
});
}

return waitOn({
resources: ['http://localhost:8000'],
timeout: 30000,
validateStatus: (status) => [200, 404, 405].includes(status),
headers: { Accept: 'application/json' }
});
}

app.whenReady().then(() => {
startBackend()
.then(() => {
console.log("✅ Backend is up. Proceeding to open window...");
createWindow();
})
.catch((err) => {
console.error('❌ Application startup failed:', err);
dialog.showErrorBox('Startup Error', `Could not reach backend: ${err.message}`);
app.quit();
});

app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});

app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});

app.on('before-quit', () => {
if (backendProcess) {
console.log('🧹 Cleaning up backend process...');
backendProcess.kill();
}
});
```. This is my package.json;;
```{
"name": "flexiweigh",
"version": "1.0.1",
"description": "Weighbridge Management System Desktop Application",
"author": "Moyo ",
"homepage": "https://github.com/DUMBALINYOLO/Flexiweigh2",
"main": "main.js",
"scripts": {
"start": "electron .",
"package-win": "electron-builder --win",
"package-linux": "electron-builder --linux",
"package-linux-deb": "electron-builder --linux deb",
"package-all": "electron-builder -wl"
},
"dependencies": {
"wait-on": "7.1.0"
},
"devDependencies": {
"electron": "28.1.0",
"electron-builder": "24.6.3"
},
"build": {
"appId": "[email protected]",
"productName": "FlexiWeigh",
"copyright": "Copyright © 2025 Your Company",
"files": [
"main.js",
"flexiweigh",
"icon.png",
"!node_modules/{.bin,.cache}"
],
"extraFiles": [
{
"from": "./flexiweigh",
"to": "flexiweigh"
}
],
"asarUnpack": [
"flexiweigh"
],
"directories": {
"output": "dist"
},
"win": {
"target": [
"nsis",
"portable"
],
"icon": "assets/icon.ico",
"publisherName": "FlexiWeigh"
},
"linux": {
"target": ["AppImage", "deb"],
"icon": "assets/icon.png",
"category": "Utility",
"maintainer": "[email protected]",
"synopsis": "Weighbridge Management System",
"description": "Complete weighbridge management solution",
"desktop": {
"StartupWMClass": "flexiweigh"
}
},
"nsis": {
"oneClick": false,
"allowToChangeInstallationDirectory": true,
"createDesktopShortcut": true,
"createStartMenuShortcut": true
},
"deb": {
"depends": [
"libgtk-3-0",
"libnotify4",
"libnss3",
"libxss1",
"libxtst6",
"xdg-utils",
"libatspi2.0-0",
"libuuid1",
"libappindicator3-1"
]
}
}
}```


Подробнее здесь: https://stackoverflow.com/questions/796 ... roject-and
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»