我正在尝试制作一个从我的串口读取数据的电子应用程序(https://electron.atom.io/)。我是Web技术的新手,我知道一些javascript,但我是一个c ++人。
所以我从github快速入手,跑了
npm install && npm start
随着这项工作的轻松实现,我尝试使用
安装和运行serialportnpm install serialport
使用测试文件安装并运行正常,我尝试将两者结合起来并将require('serialport')
放在index.html文件中。有了这个,我得到了这个错误:
Uncaught Error: The module '/home/user/Documents/Programing/Git/Arduino-mpu6050/electron-quick-start/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/user/Documents/Programing/Git/Arduino-mpu6050/electron-quick-start/node_modules/bindings/bindings.js:76:44)
at Object.<anonymous> (/home/user/Documents/Programing/Git/Arduino-mpu6050/electron-quick-start/node_modules/serialport/lib/bindings.js:3:35)
任何想法如何解决?我没有使用两个不同版本的Node,为什么我会收到此错误。
系统操作系统信息:
Distributor ID: Ubuntu
Description: Ubuntu 16.04.2 LTS
Release: 16.04
Codename: xenial
答案 0 :(得分:45)
当发生此类型的版本不匹配时,您可以选择具有目标节点版本的电子分布,也可以重建npm包。由于Electron的发行版已跳过使用NODE_MODULE_VERSION 51配置的Node v7.0.0(并跳转到v7.4.0),因此您必须重建serialport
包。
在您应用的目录中(package.json所在的目录),
<强> 1。安装electron-rebuild
npm install --save-dev electron-rebuild
<强> 2。重建强>
./node_modules/.bin/electron-rebuild
或者,甚至更好的选择 - 从一开始就设置环境变量。
# Electron's version.
export npm_config_target=1.6.1
# The architecture of Electron, can be ia32 or x64.
export npm_config_arch=x64
export npm_config_target_arch=x64
# Download headers for Electron.
export npm_config_disturl=https://atom.io/download/electron
# Tell node-pre-gyp that we are building for Electron.
export npm_config_runtime=electron
# Tell node-pre-gyp to build module from source code.
export npm_config_build_from_source=true
# Install all dependencies, and store cache to ~/.electron-gyp.
HOME=~/.electron-gyp npm install
查看Electron的文档页面,了解如何使用本机Node模块。 https://electron.atom.io/docs/tutorial/using-native-node-modules/
答案 1 :(得分:9)
electron-rebuild
。根据您的操作,您可以使用 electron-rebuild 将postinstall
重建为已安装的serialport
版本。
这样做:
electron
因为在执行npm安装后我一直忘记这样做(以及帮助其他下载项目的人),我将以下两个脚本添加到npm install --save-dev electron-rebuild
$(npm bin)/electron-rebuild # Mac and Linux.
.\node_modules\.bin\electron-rebuild.cmd # Windows.
:
package.json
执行"scripts": {
"start": "electron .",
"postinstall": "electron-rebuild",
"electron-rebuild": "electron-rebuild"
},
后postinstall
将自动运行,因此在典型安装完成后,您将看到一条带npm install
的控制台日志消息,它将自动重建{{1}您拥有的electron-rebuild
版本的任何其他本机库。这意味着您甚至不必考虑继续运行serialport
。
要手动重新运行electron
,只需使用electron-rebuild
运行它。
Easy-peezie,lemon-squeezie!
答案 2 :(得分:3)
使用内容创建文件.npmrc
:
runtime = electron
target = 1.7.5
target_arch = x64
disturl = https://atom.io/download/atom-shell
export npm_config_runtime=electron
export npm_config_build_from_source=true
打开另一个终端并运行npm install [yourpackage]
请记住,一些新软件包将安装最高电子版本(目标),因此请保存一些头痛/背痛并使用当前版本的npm更新您的target =
或者github页面。