带反应的电子:如何设置生产网络服务器

时间:2017-11-25 14:09:03

标签: node.js reactjs electron webpack-dev-server

我有电子应用程序加载在端口8080上的webpack-dev-server上运行的React应用程序.React应用程序正在与端口9001上的节点服务器应用程序通信。如何在生产中设置webserver?我现在尝试的是通过postinstall脚本单独安装节点。所以电子使用自己的节点打包版本和webpack-dev-server使用另一个版本的节点,通过脚本安装。我觉得这不是正确的方法。如何为webpack-dev-server使用电子版的节点?是否有可能只使用电子和webpack-dev-server的打包版本的节点?感谢

1 个答案:

答案 0 :(得分:0)

由于Windows上的安装后问题,通过deb依赖安装节点的想法并不好 - 在Windows上编写依赖项并不容易。相反,我下载了节点二进制文件,并将节点二进制文件打包到asar包中。 我使用files选项只打包正在运行的平台构建的二进制文件:

的package.json:

"build": {
    "asarUnpack": [
      "**/*"
    ],
    "files": [
      "!binaries",
      "binaries/${os}/${arch}/node",
      "src",
      "*.html",
      "*.js",
      "*.tpl",
      "*.sh",
      "*.json",
      "*.md",
      "*.lock"
    ],

感谢asarUnpack选项,我解压缩了asar包,并且我能够访问文件系统上的节点二进制文件。然后在主进程index.js中我以这种方式构造节点路径:

const nodePath = path.join(
    process.resourcesPath,
    "app.asar.unpacked",
    'binaries',
    platform == "win32" ? "win" : platform,
    arch,
    "node"
)

const productionWebpackServerStartPathArgs = [`${process.resourcesPath}/app.asar.unpacked/node_modules/webpack-dev-server/bin/webpack-dev-server.js`, '--config', `${process.resourcesPath}/app.asar.unpacked/webpack.config.js`];
let webpack_dev_server_cmd = crossSpawn(nodePath, productionWebpackServerStartPathArgs );