javascript - lado - node js pdf 2018
conflicto de la versión del módulo de nodo al instalar módulos para el electrón (3)
Estoy tratando de hacer una aplicación Electron ( https://electron.atom.io/ ) que lea datos de mi puerto serie. Soy nuevo en tecnologías web en general, conozco algunos javascript, pero soy un chico de C ++.
Así que saqué su quick-start de github, corrí
npm install && npm start
Con esto fácil de trabajar, traté de instalar y ejecutar serialport con
npm install serialport
Con eso instalado y funcionando bien con un archivo de prueba, traté de combinar los dos y poner require(''serialport'')
en el archivo index.html. Con esto allí obtengo este error:
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)
¿Alguna idea para solucionarlo? No estoy usando dos versiones diferentes de Node, ¿por qué recibo este error?
Información del sistema operativo:
Distributor ID: Ubuntu
Description: Ubuntu 16.04.2 LTS
Release: 16.04
Codename: xenial
electron-rebuild
en postinstall
.
Dependiendo de lo que esté haciendo, puede usar electron-rebuild para reconstruir el serialport
a la versión de electron
que ha instalado.
Para hacerlo:
npm install --save-dev electron-rebuild
$(npm bin)/electron-rebuild # Mac and Linux.
./node_modules/.bin/electron-rebuild.cmd # Windows.
Debido a que me olvidaba de hacer esto después de hacer una instalación npm (y para ayudar a otras personas que descargaron el proyecto), agregué los siguientes dos scripts a package.json
:
"scripts": {
"start": "electron .",
"postinstall": "electron-rebuild",
"electron-rebuild": "electron-rebuild"
},
El postinstall
se ejecutará automáticamente después de realizar una npm install
luego de que termine la instalación típica, verá un mensaje de registro de la consola con electron-rebuild
y automáticamente reconstruirá el serialport
, y cualquier otra biblioteca nativa que tenga, a la versión electron
. Esto significa que ni siquiera deberías pensar en ejecutar electron-rebuild
futuro. 👍
Para volver a ejecutar manualmente la reconstrucción de electron-rebuild
simplemente ejecútelo con npm run electron-rebuild
.
¡Easy-peezie, lemon-squeezie!
Crear archivo .npmrc
con contenido:
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
Abra otra terminal y ejecute npm install [yourpackage]
Tenga en cuenta que algunos paquetes nuevos se instalarán con la versión electrónica más alta (destino), así que ahórrese un poco de dolor de cabeza / dolor de espalda y actualice su target =
con la versión actual indicada en la página npm o github.
Cuando se produce este tipo de desajuste de versión, puede elegir una distribución de electrones con la versión del nodo de destino o reconstruir el paquete npm. Dado que la distribución de Electron ha omitido el nodo v7.0.0 que está configurado con NODE_MODULE_VERSION 51 (y saltó a v7.4.0), tendrías que volver a serialport
paquete serialport
.
En el directorio de su aplicación (donde se encuentra package.json en),
1. Instalar electron-rebuild
npm install --save-dev electron-rebuild
2. Reconstruir
./node_modules/.bin/electron-rebuild
O, incluso una mejor opción : establecer variables de entorno desde el primer lugar.
# 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
Eche un vistazo a la página de documentación de Electron para usar módulos de nodo nativos. https://electron.atom.io/docs/tutorial/using-native-node-modules/