29 votes

conflit de version du module node lors de l'installation de modules pour electron

J'essaie de créer une application Electron ( https://electron.atom.io/ ) qui lit les données de mon port série. Je suis novice dans les technologies web en général, je connais un peu le javascript, mais je suis un gars du c++.

J'ai donc récupéré leur quick-start sur github, et j'ai lancé

npm install && npm start

Avec ce fonctionnement facile, j'ai essayé d'installer et d'exécuter serialport avec

npm install serialport

Une fois ce système installé et fonctionnant correctement avec un fichier de test, j'ai essayé de combiner les deux et de mettre require('serialport') dans le fichier index.html. Avec ce fichier, j'obtiens l'erreur suivante :

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)

Des idées pour résoudre ce problème ? Je n'utilise pas deux versions différentes de Node, pourquoi est-ce que j'obtiens cette erreur.

Informations sur le système d'exploitation :

Distributor ID: Ubuntu
Description:    Ubuntu 16.04.2 LTS
Release:    16.04
Codename:   xenial

47voto

subwaymatch Points 821

Lorsque ce type de décalage de version se produit, vous pouvez soit choisir une distribution electron avec la version cible de Node, soit reconstruire le paquet npm. Puisque la distribution Electron a ignoré Node v7.0.0 qui est configuré avec NODE_MODULE_VERSION 51 (et a sauté à v7.4.0), vous devriez reconstruire le paquet npm. serialport l'emballage.

Dans le répertoire de votre application (où se trouve le fichier package.json),

1. Installer electron-rebuild

npm install --save-dev electron-rebuild

2. Reconstruire

./node_modules/.bin/electron-rebuild

Ou, mieux encore - définir des variables d'environnement dès le départ.

# 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

Jetez un coup d'œil à la page de documentation d'Electron sur l'utilisation des modules Node natifs. https://electron.atom.io/docs/tutorial/using-native-node-modules/

3 votes

Je pense que vous devez utiliser ./node_modules/.bin/electron-rebuild au lieu de npm install pour reconstruire les modules pour electron (étape 2).

2 votes

Le gros problème est qu'alors votre build ne sera pas utilisable par Node : vous aurez le problème inverse, node vous dira que vous l'avez compilé pour la version 53 alors que vous avez besoin de la 51. Ceci est problématique pour les tests unitaires ou d'intégration par exemple https://github.com/zeromq/zeromq.js/issues/144

2 votes

Où dois-je mettre toutes ces déclarations d'exportation pour qu'elles soient vérifiées dans le repo de mon projet et que les autres développeurs les aient automatiquement définies lorsqu'ils récupèrent le code ? Ou est-ce que ce n'est pas nécessaire parce que je n'ai besoin de le faire qu'une seule fois ?

9voto

Josh Pinter Points 3814

electron-rebuild en postinstall .

En fonction de ce que vous faites, vous pouvez utiliser construction d'électrons pour reconstruire serialport à la version de electron que vous avez installé.

Pour ce faire :

npm install --save-dev electron-rebuild

$(npm bin)/electron-rebuild                 # Mac and Linux.

.\node_modules\.bin\electron-rebuild.cmd    # Windows.

Parce que j'oubliais toujours de le faire après avoir fait une installation npm (et pour aider les autres qui ont téléchargé le projet), j'ai ajouté les deux scripts suivants à package.json :

"scripts": {
  "start": "electron .",

  "postinstall": "electron-rebuild",    
  "electron-rebuild": "electron-rebuild"
},

En postinstall s'exécutera automatiquement après l'exécution d'un npm install Ainsi, une fois l'installation classique terminée, vous verrez apparaître un message de la console contenant le message suivant electron-rebuild et il reconstruira automatiquement serialport et toute autre bibliothèque native que vous possédez, à la bibliothèque electron version. Cela signifie que vous ne devriez même pas avoir à penser à exécuter la commande electron-rebuild à l'avenir.

Pour réexécuter manuellement electron-rebuild courir npm run electron-rebuild .

E

3voto

d9ngle Points 537

Créez le fichier .npmrc avec le contenu:

 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
 

Ouvrez un autre terminal et exécutez npm install [yourpackage]

Gardez à l'esprit que certains nouveaux packages seront installés avec la version électronique la plus élevée (cible), alors économisez des maux de tête / maux de dos et mettez à jour votre target = avec la version actuelle indiquée sur la page npm ou github.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X