Как я могу восстановить привязки zeromq.js для электронной версии 4.1.4? - PullRequest
5 голосов
/ 26 апреля 2019

Пытаясь использовать zeromq.js в приложении Electron, я обнаружил, что NODE_MODULE_VERSIONS, по-видимому, не соответствует:

Uncaught Error: Cannot open /home/XXXX/ptt_geo/ptt-geo-fork/src/webapp/node_modules/zeromq/build/Release/zmq.node: Error: The module '/home/XXXX/ptt_geo/ptt-geo-fork/src/webapp/node_modules/zeromq/build/Release/zmq.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 64. This version of Node.js requires
NODE_MODULE_VERSION 69. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Object.<anonymous> (vendor.js:217837)
    at Object../node_modules/zeromq/build/Release/zmq.node (vendor.js:217838)
    at __webpack_require__ (runtime.js:79)
    at Object../node_modules/zeromq/lib/index.js (vendor.js:217866)
    at __webpack_require__ (runtime.js:79)
    at Object../node_modules/zeromq/index.js (vendor.js:217850)
    at __webpack_require__ (runtime.js:79)
    at Object../src/app/services/aic-contact-listener.service.ts (main.js:4042)
    at __webpack_require__ (runtime.js:79)
    at Object../src/app/components/map/map.component.ts (main.js:1874)

В соответствии с Интернетом мне нужно перестроить zeromq.js с помощью следующегокоманда:

 npm rebuild zeromq --runtime=electron --target=<ELECTRON_VERSION>

И поэтому я запустил его для своей версии электрона (4.1.4) и получил следующую ошибку при перестроении:

gyp WARN install got an error, rolling back install
gyp ERR! configure error 
gyp ERR! stack Error: 404 response downloading https://nodejs.org/dist/v4.1.4/node-v4.1.4-headers.tar.gz
gyp ERR! stack     at Request.<anonymous> (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/install.js:214:14)
gyp ERR! stack     at Request.emit (events.js:194:15)
gyp ERR! stack     at Request.onRequestResponse (/usr/lib/node_modules/npm/node_modules/request/request.js:1066:10)
gyp ERR! stack     at ClientRequest.emit (events.js:189:13)
gyp ERR! stack     at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:556:21)
gyp ERR! stack     at HTTPParser.parserOnHeadersComplete (_http_common.js:109:17)
gyp ERR! stack     at TLSSocket.socketOnData (_http_client.js:442:20)
gyp ERR! stack     at TLSSocket.emit (events.js:189:13)
gyp ERR! stack     at addChunk (_stream_readable.js:284:12)
gyp ERR! stack     at readableAddChunk (_stream_readable.js:265:11)
gyp ERR! System Linux 3.10.0-693.el7.x86_64
gyp ERR! command "/usr/local/lib/nodejs/node-v10.15.3-linux-x64/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/XXXX/ptt_geo/ptt-geo-fork/src/webapp/node_modules/zeromq
gyp ERR! node -v v10.15.3
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! zeromq@5.1.0 install: `node scripts/prebuild-install.js || (node scripts/preinstall.js && node-gyp rebuild)`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the zeromq@5.1.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Эта ошибка возникает после того, как gcc создаетфайл библиотеки успешно, и, кажется, указывает на то, что он пытается получить заголовки node.js для версии 4.1.4, которая не существует.

Под капотом для восстановления электронов используется node-abi, поэтому я выкопал немного глубже и провел некоторые эксперименты, и кажется, что независимо от того, когда я передаю электрон в качестве среды выполнения, node-abiпытаясь использовать цель в качестве узла, чтобы определить, какие заголовки захватить вместо электрона.Это может быть проверено, например, путем передачи

npm rebuild --zeromq --runtime=electron --target=5.0.0

Это успешно восстанавливает и должно указывать на строительство с электроном 5.0, который имеет NODE_MODULE_VERSION = 70, однако, если я соберу и снова посмотрю на ошибку Electron,Вместо этого я получаю NODE_MODULE_VERSION, равный 47 (против требуемого 69), что соответствует версии 5.0.0 для node.js!

Я проверял это несколько раз в том, что когда я передаю цель, которая соответствует существующей версии node.js, я получаю обратно соответствующий NODE_MODULE_VERSION в ошибке Electron.Поэтому, полагая, что документация может быть неверной, а целью должна быть версия node.js, а не версия Electron, я пробил версию node.js, связанную с моей сборкой Electron:

npm rebuild zeromq --runtime=electron --target=10.11.0

Только чтобы нод-аби вернулся и сказал: «Я не понимаю этого»:

Error: Could not detect abi for version 10.11.0 and runtime electron.  Updating "node-abi" might help solve this issue if it is a new release of electron
    at getAbi (/home/XXXX/ptt_geo/ptt-geo-fork/src/webapp/node_modules/node-abi/index.js:30:9)
    at module.exports (/home/XXXX/ptt_geo/ptt-geo-fork/src/webapp/node_modules/prebuild-install/rc.js:71:57)
    at Object.<anonymous> (/home/XXXX/ptt_geo/ptt-geo-fork/src/webapp/node_modules/prebuild-install/bin.js:9:25)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
    at startup (internal/bootstrap/node.js:283:19)

Что соответствует тому, что я вижу в index.js нод-аби (там нет ничего, что говорит об этомчто делать для версии узла 10.11.0).

Является ли это какой-то ошибкой, и если да, то есть ли рекомендуемый обходной путь?

Используемые версии программного обеспечения:

Электрон: 4.1.4

Zeromq: 5.1.0

Узел: 10.11.0

Node-abi: 2.8.0 (выпущено сегодня, ууу ...?)

...