我不确定哪个平台/工具是我问题的根源,所以在SO上询问这个问题而不是其中一个Git-Hub存储库的问题。我正在尝试开发基于Polyonic的项目。 Polyonic本身是Electron和Ionic2的一种种子混合物。我的项目还使用了node-serialport,这是一个原生模块。
我的开发版本是: - 节点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
(在Polyonic种子中运行gulp脚本,捆绑了离子项目),项目启动和运行完美,没有node-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)
我认识到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)
在做electron-rebuild
事之前,这比起工作感觉更远。我哪里错了?任何帮助或建议将不胜感激。
答案 0 :(得分:2)
如果您将在下个小时向我发送项目,我将调查哪些错误。您不需要自动使用电子重建 - 电子生成器重建。 (我是电子建设者维护者。)
答案 1 :(得分:2)
使用@develar离线完成后,我们就能解决问题了。我在这里回帖并接受他的回答,在信用到期时给予信贷。
对Polyonic项目的This PR是直接的结果。然而,据我估计,关键的变化是将root package.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设置为&#39; build&#39;告诉电子工程师打包构建目录,这正是我所需要的。