2016-11-03 2 views
2

Я написал приложение Electron, используя Node, Electron Boilerplate и phantom. Он отлично работает для меня на моей машине linux, я скопировал источник на Windows 10 и работал с npm start, и все идет гладко.PhantomJS от узла в Windows

Однако, когда я пытаюсь создать приложение с помощью модуля шаблонов, используя npm run release, все идет немного плавно. Я могу установить и открыть приложение просто отлично, но когда я нажимаю кнопку, которая активирует фантомный модуль, окна выглядят белыми, и ничего не происходит. Я смог регистрировать некоторые ошибки с помощью инструментов dev.

Во-первых, у меня есть:

C:\...\dist\win-unpacked\resources\app.asar\node_modules\phantom\lib\phantom.js:361 
Uncaught (in promise) Error: Error reading from stdin: Error: write EPIPE(…) 

Я сделал некоторые исследования на аналогичные вопросы, а именно here, и мне кажется, проблема начинает процесс ребенка, PhantomJS, с модулем НПМ фантома. Первоначально я использовал приложение WPF, которое я написал на C#, чтобы начать процесс, и это сработало просто отлично. Это заставляет меня поверить, что фантомный модуль является виновником.

Так что я попытался выгрузив модуль фантомного НОГО horseman, но получили аналогичные результаты:

Unhandled rejection HeadlessError: Phantom immediately exited with: 4294967295 
    at ChildProcess.immediateExit (C:\...\dist\win-unpacked\resources\app.asar\node_modules\node-horseman\node_modules\node-phantom-simple\node-phantom-simple.js:153:23) 
    at ChildProcess.g (events.js:286:16) 
    at emitTwo (events.js:106:13) 
    at ChildProcess.emit (events.js:191:7) 
    at Process.ChildProcess._handle.onexit (internal/child_process.js:204:12) 
+0

https://en.wikipedia.org/wiki/File_URI_scheme –

+1

@Igor есть что-то особенное, вы видите неправильное, или вы предполагаете, что фантомный модуль имеет неправильный URI? –

+1

Вероятно, проблема безопасности Windows не позволяет запускать неподписанную программу. – Vaviloff

ответ

1

Вот снимок в темноте. Я не уверен, что это решит проблему, но здесь идет:

GYP и промахи соответствия бинарники

Phantom и многие другие модули узлов используют двоичные файлы, созданные для конкретной операционной системы, что он будет запущен. Иногда в файлах журнала npm вы увидите ссылки на node-gyp. Node-gyp просто помогает создавать собственные надстройки в узловых модулях. Когда создаются двоичные файлы, они обычно строятся, в частности, из трех основных параметров: операционной системы, архитектуры процессора и версии узла, который выполняет установку.

Я думаю, вам нужно перестроить phantomjs на версию узла, который использует Electron. В большинстве случаев версия узла, установленная на вашем компьютере, и версия узла, работающая в Electron, не совпадают. Electron делает все возможное, чтобы идти в ногу с ним, но всегда есть небольшое отставание из-за объема работы и тестирования, необходимых для поддержания актуальности.

При установке фантома при запуске npm install phantom предполагается, что ему потребуется установить или создать двоичные файлы для версии узла , используемой вашей машиной. Затем, когда ваше приложение Electron пытается запустить фантом, он пытается вызывать двоичный код версии Electron's. Когда этого не происходит, дочерний процесс немедленно выходит с ошибкой.

Как исправить

К счастью, есть и другие люди, которые там придумали, как решить эту проблему и создали отличный инструмент, чтобы помочь сформировать правильные двоичные файлы.

Введите electron-rebuild:

https://github.com/electron/electron-rebuild

Электронно-восстановления можно запустить в командной строке, и он будет восстановить все ваши родные модули для версии Electron ваш проект использует.

Для установки:

npm install electron-prebuilt

Чтобы использовать (в Windows):

.\node_modules\.bin\electron-rebuild.cmd

Это должно быть достаточно, чтобы поставить правильные двоичные файлы в нужном месте.

Другие мысли

Иногда вы можете использовать пакет, который использует зависимость с именем узла предварительного лавочка. Например. sqlite3. Существует известная проблема, с которой я столкнулся, когда пытаюсь перестроить мои пакеты для Electron. В принципе, чтобы избежать этой проблемы (если вы столкнулись с ней) просто добавьте --pre-gyp-fix к вышеуказанной команде.

Tangent для тех, кто столкнулся с вопросом заранее лавочка починки

Еще одна вещь, на пре-лавочка исправить: Если один или несколько зависимостей зависит от одного из модулей, которые нуждаются в pre-gyp-fix, тогда они будут искать двоичные файлы не в том месте, даже если они работают в Electron. Все предварительно Gyp двоичные файлы сохраняются в папке, подобной этой:

.\node_modules\sqlite3\lib\binding

В моем текущем проекте у меня есть три папки, по одному для электронно-v1.4, и два для узла-V46 и узел-V50. (hack alert) Чтобы работать sqlite3 с другими моими зависимостями, я копирую двоичный файл, найденный в папке Electron-v1.4, и помещаю его в папки с узлами-v *. Таким образом, при работе в Electron все зависимости запускают правильные двоичные файлы, даже если они ищут их не в том месте. (конца хак оповещение)

Заключение

Там нет никакого способа, я могу быть уверен, что это не имеет ничего общего с вопросом вы видите. Но стоит подумать, не исправляет ли ваша проблема. Если нет, то, по крайней мере, я надеюсь, что смогу помочь кому-то другому испытать те же проблемы, с которыми я столкнулся.

Смежные вопросы