使用Ionic2、serialport和Electron builder构建电子

使用Ionic2、serialport和Electron builder构建电子,ionic2,electron,electron-builder,node-serialport,Ionic2,Electron,Electron Builder,Node Serialport,我不确定哪一个平台/工具是我问题的根源,所以在某个平台上问这个问题,而不是在某个Git Hub存储库上问这个问题。我正试图开发一个基于。普立万本身就是一种电子和离子的混合种子。我的项目还使用,这是一个本机模块 我的开发版本是: -节点7.4.0 -电子1.6.10 。。。在我的项目的src文件夹中运行ionic info,可以得到: global packages: @ionic/cli-utils : 1.4.0 Cordova CLI : 7.0.1 G

我不确定哪一个平台/工具是我问题的根源,所以在某个平台上问这个问题,而不是在某个Git Hub存储库上问这个问题。我正试图开发一个基于。普立万本身就是一种电子和离子的混合种子。我的项目还使用,这是一个本机模块

我的开发版本是: -节点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
,然后在根目录中安装
npm
,在根目录中启动
npm
(它在捆绑了爱奥尼亚项目的Polyonic种子中运行一个gulp脚本),项目将完美启动并运行,节点serialport没有问题

如果我在项目根目录下运行
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)
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)
。。。然后返回到我的项目根文件夹并运行
npm start
(它像以前一样正常运行),然后运行
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)
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)
未捕获错误:找不到模块“serialport”
在模块处.u解析文件名(Module.js:470)
位于Function.Module.\u resolveFilename(/tmp/.mount\u 7laJTZ/usr/bin/resources/electron.asar/common/reset search path.js:35)
在Function.Module.\u加载(Module.js:418)
at Module.require(Module.js:498)
根据需要(内部/module.js:20)
反对。(main.js:73788)
at\uuuu网页需要(main.js:20)
反对。(main.js:72414)
at\uuuu网页需要(main.js:20)
反对。(main.js:111408)

这感觉比我做
electron-rebuild
之前工作得更远了。我哪里做错了?任何帮助或建议都将不胜感激。

如果您能在下个小时将项目发送给我,我将调查问题所在。您不需要使用electron重建-electron builder会自动重建。(我是electron builder的维护人员。)

如果您在下个小时给我发送项目,我将调查出什么问题。您不需要使用electron重建-electron builder会自动重建。(我是electron builder的维护人员。)

在与@develar脱机工作后,我们能够解决该问题。我在这里发帖,接受他的回答,在应该得到赞扬的地方给予赞扬

这是普立万公司项目的直接结果。然而,据我估计,关键的变化是将root package.json的构建块修改为:

"build": {
  "appId": "YOUR.APPID.GOES.HERE",
  "directories": {
    "app": "build"
   }
},
。。。确保electron在devDependencies部分而不是dependencies部分

这里的关键点是,当您运行
npm start
时,Polyonic会将所有内容打包并放入项目根目录中的构建文件夹中。然后运行
cd-build&&electron.
来运行启动项目。根据electron builder文档:

  • 目录

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

。。。因此,将build.directories.app设置为“build”会告诉electron builder打包build目录,这正是我所需要的。

在使用@develar脱机完成后,我们能够解决这个问题。我在这里发帖,接受他的回答,在应该得到赞扬的地方给予赞扬

这是普立万公司项目的直接结果。然而,据我估计,关键的变化是将root package.json的构建块修改为:

"build": {
  "appId": "YOUR.APPID.GOES.HERE",
  "directories": {
    "app": "build"
   }
},
。。。确保electron在devDependencies部分而不是dependencies部分

这里的关键点是,当您运行
npm start
时,Polyonic会将所有内容打包并放入项目根目录中的构建文件夹中。然后运行
cd-build&&electron.
来运行启动项目。根据electron builder文档:

  • 目录

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

。。。因此,将build.directories.app设置为“build”会告诉electron builder打包生成目录,这正是我所需要的。

哇,太酷了,我刚刚在(私有)github repo上添加了您作为合作者。。。看看串行服务分支。。。如果您想知道这一点,可以在freenode handle vicatcu上与我聊天,但仔细阅读native和electron的节点串行端口回购问题会发现userland中存在很多混乱。我已经成功地构建了这个平凡的项目:请使用slackdirectmessages()与我联系。不清楚如何使用freenode:)请参阅我的自我回答,了解我们如何使其工作的详细信息哇,很酷,我刚刚将您添加为(私有)github repo上的合作者。。。看看串行服务分支。。。如果您想知道这一点,可以在freenode handle vicatcu上与我聊天,但仔细阅读native和electron的节点串行端口回购问题会发现userland中存在很多混乱。我已经成功地构建了这个平凡的项目:请使用slackdirectmessages()与我联系。不清楚如何使用freenode:)请参阅我的自我回答,了解我们如何使其工作的详细信息