首页 文章

使用Ionic2,serialport和电子构建器构建Electron

提问于
浏览
0

我试图开发一个基于Polyonic的项目 . Polyonic本身是Electron和Ionic2的一种种子混合物 . 我的项目也使用node-serialport,这是一个Native Module .

我的开发版本是: - 节点7.4.0 - 电子1.6.10

...并在我的项目的src文件夹中运行 ionic info 给出:

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

如果我在src目录中执行 npm install ,然后在根目录中执行 npm install ,在根目录中运行 npm start (在捆绑Ionic项目的Polyonic种子中运行gulp脚本),项目启动并运行完美,节点没有问题-串行端口 .

如果我然后通过在项目的根目录中运行 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上有other related questions建议使用 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)

在做这件事之前,这比起工作感觉更远 . 我哪里错了?任何帮助或建议将不胜感激 .

2 回答

  • 2

    如果你将在下个小时发给我项目,我会调查什么是错的 . 您不需要使用电子重建 - 电子生成器自动重建 . (我是电子建设者维护者 . )

  • 2

    在使用@develar离线完成后,我们能够解决问题 . 我在这里回帖并接受他的回答,在信用到期时给予信贷 .

    This PR对Polyonic项目是直接的结果 . 据我估计,关键的变化是将root.json的构建块修改为:

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

    ...并确保电子在devDependencies部分而不是依赖部分 .

    这里的关键点是Polyonic,当你运行 npm start 捆绑所有东西并将它放入项目根目录下的构建文件夹中 . 然后它运行 cd build && electron . 来运行启动项目 . 根据电子建设者的文档:

    目录buildResources = build String - 构建资源的路径 . output = dist String - 输出目录 . app String - 应用程序目录(包含应用程序package.json),默认为app,www或工作目录 .

    ...所以将build.directories.app设置为'build'会告诉电子生成器打包构建目录,这正是我所需要的 .

相关问题