Приложение Electron не запускается / не выставляет сервер express в упаковке, но работает с npm start - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь создать электронное приложение, которое запустит образец BrowserWindow с некоторым содержанием. В то же время приложение создаст дочерний процесс сервера express, который будет доступен пользователю (через браузер - примерная ссылка: http://localhost: 9000 / ). Все работает как чудо, когда я запускаю его локально через npm start.

Проблема возникает, когда я пытаюсь собрать свое приложение, используя electron-builder to windows portable exe. Когда я открываю этот exe-файл (расположенный после сборки в dist / ), появляется электрон BrowserWindow, но я не могу добраться до API express в моем браузере. ОДНАКО, когда я go в dist / win-unpacked и запускаю exe, существующий там, я получаю BrowserWindow, и я могу открыть http://localhost: 9000 / в моем браузере. Есть идеи как это возможно и самое главное как это исправить?

Мой пакет. json:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "electron .",
    "package": "electron-builder build --win"
  },
  "build": {
    "appId": "test",
    "productName": "test",
    "copyright": "Copyright © 2019 ${author}",
    "files": [
      "./index.js",
      "./index.html",
      "./express.js",
      "node_modules/**/*"
    ],
    "win": {
      "target": [
        "portable"
      ]
    },
    "directories": {
      "buildResources": "assets"
    }
  },
  "keywords": [],
  "author": "John Doe",
  "license": "ISC",
  "devDependencies": {
    "electron": "^8.2.5",
    "electron-builder": "^22.6.0",
    "express": "^4.17.1"
  }
}

Мой индекс. js:

const { app, BrowserWindow } = require('electron')

const server = require('child_process').fork(`${__dirname}/express.js`);

function createWindow () {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  })

  win.loadFile('index.html')

  win.webContents.openDevTools()
}

app.whenReady().then(createWindow)

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

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

My express. js:

(function () {

    const express = require("express");

    const app = express();
    const PORT = 9000;

    app.get('/', (req, res) => {
        res.json({
            response: "OK"
        });
    });

    app.listen(PORT, "localhost", () => {
        console.log(`Web server started successfully (port: ${PORT})`);
    });

}());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...