Сборка Electron с помощью Ionic2, последовательного порта и построителя электронов

Я не уверен, какая из платформ / инструментов является корнем моей проблемы, поэтому задаю этот вопрос о SO, а не о проблемах одного из репозиториев Git-Hub. Я пытаюсь разработать проект на основе Polyonic. Сам по себе Polyonic - это своего рода начальный гибрид Electron и Ionic2. В моем проекте также используется node-serialport, который является собственным модулем.

Мои версии для разработки: - Node 7.4.0 - Electron 1.6.10

... и запуск ionic info в папке src моего проекта дает:

global packages:

    @ionic/cli-utils : 1.4.0
    Cordova CLI      : 7.0.1 
    Gulp CLI         : CLI version 3.9.1 Local version 3.9.1
    Ionic CLI        : 3.4.0

local packages:

    @ionic/app-scripts              : 1.3.7
    @ionic/cli-plugin-cordova       : 1.4.0
    @ionic/cli-plugin-gulp          : 1.0.1
    @ionic/cli-plugin-ionic-angular : 1.3.1
    Cordova Platforms               : browser 4.1.0
    Ionic Framework                 : ionic-angular 3.3.0

System:

    Node       : v7.4.0
    OS         : Linux 4.6
    Xcode      : not installed
    ios-deploy : not installed
    ios-sim    : not installed
    npm        : 4.0.5

Если я сделаю npm install в каталоге src, затем npm install в корневом каталоге, npm start в корневом каталоге (который запускает скрипт gulp в семени Polyonic, которое объединяет проект Ionic), проект запускается и работает отлично, никаких проблем с узлом -последовательный порт.

Если я затем создам исполняемый файл, запустив electron builder в корне моего проекта, а затем запустив исполняемый файл в консоли Chrome DevTools, я получу следующий результат:

Uncaught Error: The module '/home/vic/git/MyProject/build/node_modules/serialport/build/Release/serialport.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 51. This version of Node.js requires
NODE_MODULE_VERSION 53. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or`npm install`).
    at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
    at Object.Module._extensions..node (module.js:598:18)
    at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at bindings (/home/vic/git/MyProject/build/node_modules/bindings/bindings.js:76:44)
    at Object.<anonymous> (/home/vic/git/MyProject/build/node_modules/serialport/lib/bindings.js:3:35)

Я понимаю, что есть другие связанные вопросы по SO, которые предлагают использовать electron-rebuild для обеспечения собственные модули построены на версии узла, ожидаемой Electron. Но если я захожу в папку src проекта, то запускаю:

rm -rf node_modules/serialport/build/* 
node_modules/.bin/electron-rebuild -w serialport -f 

... затем вернитесь в корневую папку моего проекта и запустите npm start (он работает нормально, как и раньше), затем запустите electron-builder и запустите исполняемый файл в консоли Chrome DevTools, я получаю следующий результат:

Uncaught Error: Cannot find module 'serialport'
    at Module._resolveFilename (module.js:470)
    at Function.Module._resolveFilename (/tmp/.mount_7laJTZ/usr/bin/resources/electron.asar/common/reset-search-paths.js:35)
    at Function.Module._load (module.js:418)
    at Module.require (module.js:498)
    at require (internal/module.js:20)
    at Object.<anonymous> (main.js:73788)
    at __webpack_require__ (main.js:20)
    at Object.<anonymous> (main.js:72414)
    at __webpack_require__ (main.js:20)
    at Object.<anonymous> (main.js:111408)

Мне кажется, что это дальше от работы, чем до того, как я начал заниматься этим electron-rebuild. Где я ошибаюсь? Любая помощь или предложения будут оценены.


person vicatcu    schedule 02.07.2017    source источник


Ответы (2)


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

person develar    schedule 02.07.2017
comment
Круто, я только что добавил вас в качестве соавтора в (частный) репозиторий github ... взгляните на ветку serial-service ... вы можете поговорить со мной на freenode handle vicatcu, если хотите - person vicatcu; 02.07.2017
comment
Возможно, вы уже знаете об этом, но изучение проблем репозитория node-serialport для native и electronic обнаруживает большую путаницу в пользовательском пространстве. Мне удалось успешно создать тривиальный проект: github.com/johnny-five-io / электронный-последовательный порт - person vicatcu; 02.07.2017
comment
Свяжитесь со мной, используя прямые сообщения Slack (slackin.electron.build). Непонятно как пользоваться freenode :) - person develar; 02.07.2017
comment
См. Мой самоответчик, чтобы узнать, что мы сделали, чтобы он заработал. - person vicatcu; 02.07.2017

Поработав в автономном режиме с @develar, мы смогли решить проблему. Я отправляю сообщение сюда и принимаю его ответ, чтобы отдать должное, где причитается.

Этот PR для проекта Polyonic является прямым результатом. По моей оценке, ключевым изменением, однако, было изменение блока сборки корневого package.json на:

"build": {
  "appId": "YOUR.APPID.GOES.HERE",
  "directories": {
    "app": "build"
   }
},

... и убедившись, что электрон находится в разделе devDependencies, а не в разделе dependencies.

Ключевым моментом здесь является то, что Polyonic при запуске npm start объединяет все в пакеты и помещает их в папку сборки в корне вашего проекта. Затем он запускает cd build && electron . для запуска проекта запуска. Согласно документации по сборщику электронов:

  • каталоги

    • buildResources = build String - The path to build resources.
    • output = dist String - Выходной каталог.
    • app String - Каталог приложения (содержащий приложение package.json), по умолчанию - app, www или рабочий каталог.

... поэтому установка build.directories.app на 'build' сообщает электронному сборщику упаковать каталог сборки, что мне и нужно.

person vicatcu    schedule 02.07.2017