Используя 'экспресс' внутри основного потока Electron, не могу найти модуль - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь использовать библиотеку express в файле main.js .Он отлично работает на моей сборке dev, но когда я упаковываю приложение, я получаю

Ошибка: не удается найти модуль 'express'

Я не совсем уверен, как электроносновной поток работает, упакован ли он отдельно каким-либо другим инструментом сборки, и мне нужно определить (включить) пакет вручную?Мое приложение упаковано в веб-пакет, и я включил библиотеки в package.json .Каждый найденный мной образец включает только библиотеку express и идет дальше, я не могу найти для этого никаких дополнительных шагов.

package.json

{
  "name": "basic-electron-react-boilerplate",
  "version": "0.7.0",
  "description": "Minimal and modern react+electron+webpack boilerplate",
  "author": "Phillip Barbiero",
  "homepage": "https://github.com/pbarbiero/basic-electron-react-boilerplate",
  "repository": {
    "type": "git",
    "url": "https://github.com/pbarbiero/basic-electron-react-boilerplate.git"
  },
  "build": {
    "appId": "your.id",
    "mac": {
      "category": "your.app.category.type"
    }
  },
  "license": "MIT",
  "main": "main.js",
  "scripts": {
    "prod": "webpack --config webpack.build.config.js && electron --noDevServer .",
    "test": "node  test.js",
    "dev": "webpack-dev-server --hot --host 0.0.0.0 --config=./webpack.dev.config.js",
    "build": "webpack --config webpack.build.config.js",
    "package": "webpack --config webpack.build.config.js",
    "postpackage": "electron-packager ./ --out=./builds",
    "pack": "electron-builder --dir",
    "dist": "electron-builder"
  },
  "devDependencies": {
    "@babel/core": "^7.1.2",
    "@babel/plugin-proposal-class-properties": "^7.1.0",
    "@babel/plugin-proposal-export-default-from": "^7.0.0",
    "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
    "@babel/preset-env": "^7.1.0",
    "@babel/preset-es2017": "^7.0.0-beta.53",
    "@babel/preset-react": "^7.0.0",
    "babel-core": "^6.24.1",
    "babel-loader": "^8.0.4",
    "babel-plugin-lodash": "^3.3.4",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-es2016": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "babel-preset-stage-2": "^6.24.1",
    "babili-webpack-plugin": "^0.1.2",
    "body-parser": "^1.18.3",
    "css-loader": "^0.28.1",
    "electron": "^1.7.8",
    "electron-builder": "^20.28.4",
    "electron-packager": "^9.1.0",
    "express": "^4.16.4",
    "extract-text-webpack-plugin": "^3.0.1",
    "file-loader": "^1.1.5",
    "html-webpack-plugin": "^2.28.0",
    "react": "^16.0.0",
    "react-dom": "^16.0.0",
    "request": "^2.88.0",
    "style-loader": "^0.19.0",
    "webpack": "^3.6.0",
    "webpack-dev-server": "^2.4.5"
  },
  "dependencies": {
    "electron-fetch": "^1.2.1",
    "electron-require": "^0.3.0",
    "express": "^4.16.4",
    "faker": "^4.1.0",
    "lodash": "^4.17.11",
    "moment": "^2.22.2",
    "rc-time-picker": "^3.4.0",
    "react-async-script-loader": "^0.3.0",
    "react-dropdown": "^1.6.2",
    "react-places-autocomplete": "^7.2.0",
    "request": "^2.88.0",
    "resolve-url-loader": "^3.0.0",
    "semantic-ui-css": "^2.4.1",
    "semantic-ui-react": "^0.82.5",
    "styled-components": "^4.0.2"
  }
}

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете запустить Express сервер внутри Electron. Вот пример репо для запуска экспресса внутри Electron.

Вы можете создать дочерний процесс для запуска экспресс-приложения следующим образом

app = require("electron").remote.app),
node = require("child_process").fork(
         `${app.getAppPath()}/express-app/bin/www`,
         [],
         {
             stdio: ["pipe", "pipe", "pipe", "ipc"]
         });

Экспресс-приложение, используемое здесь:сгенерированный с использованием express-generator.

Проблема вашего подхода в том, что вы поддерживаете один файл package.json для Electron и Express.Checkout Electron-React-Boilerplate , здесь у меня есть два отдельных места установки npm, одно для одного Electron, а другое для React.Электрон-упаковщик и Электрон-строитель работают по этой схеме.По этой причине ваш процесс в главном потоке выдает

Ошибка: не удается найти модуль 'express'

...