socket.io electron-forge 和 mac os-x 的原生依赖问题

socket.io native dependency issues with electron-forge and mac os-x

我正在尝试在 Electron 应用程序中使用 socket.io,并且我一直在使用 electron-forge 来构建和打包。

下面的输出是 运行 electron-forge 从名为 tester 的 vanilla electron-init 应用程序启动的结果,socket.io 通过 npm 安装。

An unhandled error has occurred inside Forge:
gyp info it worked if it ends with ok
gyp info using node-gyp@3.6.2
gyp info using node@7.5.0 | darwin | x64
gyp info spawn /usr/local/bin/python2
gyp info spawn args [ '/Users/jamiehudson/.nvm/versions/node/v7.5.0/lib/node_modules/electron-forge/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/jamiehudson/dev/electronStuff/tester/node_modules/uws/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/jamiehudson/.nvm/versions/node/v7.5.0/lib/node_modules/electron-forge/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/jamiehudson/.electron-gyp/.node-gyp/iojs-1.6.11/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/jamiehudson/.electron-gyp/.node-gyp/iojs-1.6.11',
gyp info spawn args   '-Dnode_gyp_dir=/Users/jamiehudson/.nvm/versions/node/v7.5.0/lib/node_modules/electron-forge/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/jamiehudson/.electron-gyp/.node-gyp/iojs-1.6.11/<(target_arch)/iojs.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/jamiehudson/dev/electronStuff/tester/node_modules/uws',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.' ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/uws/src/Extensions.o
  CXX(target) Release/obj.target/uws/src/Group.o
In file included from ../src/Group.cpp:1:
In file included from ../src/Group.h:4:
In file included from ../src/WebSocket.h:4:
In file included from ../src/WebSocketProtocol.h:5:
../src/Networking.h:7:10: fatal error: 'openssl/opensslv.h' file not found
#include <openssl/opensslv.h>
         ^
1 error generated.
make: *** [Release/obj.target/uws/src/Group.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/jamiehudson/.nvm/versions/node/v7.5.0/lib/node_modules/electron-forge/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at emitTwo (events.js:106:13)
gyp ERR! stack     at ChildProcess.emit (events.js:192:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
gyp ERR! System Darwin 16.5.0
gyp ERR! command "/Users/jamiehudson/.nvm/versions/node/v7.5.0/bin/node" "/Users/jamiehudson/.nvm/versions/node/v7.5.0/lib/node_modules/electron-forge/node_modules/.bin/node-gyp" "rebuild" "--target=1.6.11" "--arch=x64" "--dist-url=https://atom.io/download/electron" "--build-from-source"
gyp ERR! cwd /Users/jamiehudson/dev/electronStuff/tester/node_modules/uws
gyp ERR! node -v v7.5.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok

我已经从 brew 链接了最新版本的 openssl:

openssl 版本

OpenSSL 1.0.2l  25 May 2017

package.json:

{
  "name": "tester",
  "productName": "tester",
  "version": "1.0.0",
  "description": "My Electron application description",
  "main": "src/index.js",
  "scripts": {
    "start": "electron-forge start",
    "package": "electron-forge package",
    "make": "electron-forge make",
    "lint": "eslint src"
  },
  "keywords": [],
  "author": "jamiehudson",
  "license": "MIT",
  "config": {
    "forge": {
      "make_targets": {
        "win32": [
          "squirrel"
        ],
        "darwin": [
          "zip"
        ],
        "linux": [
          "deb",
          "rpm"
        ]
      },
      "electronPackagerConfig": {},
      "electronWinstallerConfig": {
        "name": "tester"
      },
      "electronInstallerDebian": {},
      "electronInstallerRedhat": {},
      "github_repository": {
        "owner": "",
        "name": ""
      },
      "windowsStoreConfig": {
        "packageName": "",
        "name": "tester"
      }
    }
  },
  "dependencies": {
    "electron-compile": "^6.4.1",
    "socket.io": "^2.0.3"
  },
  "devDependencies": {
    "babel-plugin-transform-async-to-generator": "^6.24.1",
    "babel-preset-env": "^1.6.0",
    "babel-preset-react": "^6.24.1",
    "electron-prebuilt-compile": "1.6.11",
    "eslint": "^4.2.0",
    "eslint-config-airbnb": "^15.0.2",
    "eslint-plugin-import": "^2.7.0",
    "eslint-plugin-jsx-a11y": "^6.0.2",
    "eslint-plugin-react": "^7.1.0"
  }
}

节点版本:

v7.5.0

Mac OS 版本:

Sierra 10.12.4

我在 Ubuntu 上遇到了同样的问题,但在安装 libssl-dev 后,问题得到了纠正。

可能是 node-gyp 问题 + python + 一些 openssl 问题?

这只是 openssl 的问题,需要符号化 link brew 安装并添加 CPPFLAGS 和 LDFLAGS 环境变量:

CPPFLAGS=-I/usr/local/opt/openssl/include LDFLAGS=-L/usr/local/opt/openssl/lib

uws 现在构建良好