Demon ne se lance pas: Error: Cannot find module ‹ serialport

Bonjour ,

Cela fait 2 jours que je galère en ayant parcouru les forum de la JEEDOM community et autres , nom problème est certes connu ici mais aucune des solution n'a marché pour moi .

Mon systeme est sur un Raspberry pi 3+ uname -a : Linux jeedom 5.10.103-v7 ( 32bits) Jeedom Version : 4.3.15 image telechargée sur le site JEEDOM.

 - sur l'execution du demon qui ne se lance pas voici le log : 
Sun Feb 05 2023 09:54:10 GMT+0100 (Central European Standard Time) - Jeedom url : http://127.0.0.1:80/plugins/rflink/core/api/rflink.php?apikey=xxxxxxx, gwAddress : /dev/ttyACM0
internal/modules/cjs/loader.js:638
    throw err;
    ^
Error: Cannot find module 'serialport'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at launchGateway (/var/www/html/plugins/rflink/resources/rflink.js:88:20)
    at Object.<anonymous> (/var/www/html/plugins/rflink/resources/rflink.js:178:1)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)

Mais le plus dommage , c’est que la reinstall des dépendance ne fonctionne pas , même pas un log package quand j’appuie sur relancer la touche réagis mais y’a rien qui se passe

j’ai quand même réussi a installer manuellement telnet client sudo npm install telnet-client mais normalement la reinstall dépendance devrait se charger de ca.

J’ai essayé la RFlink beta et stable rien de nouveau .

HELP Please (et merci a la communauté)

Salut,

As-tu essayé ceci (vu ici) :

@+

Bonjour,

Voir ici : 'nodejs': No such file or directory - #3 par akenad

Et ici : Plugin qui ne démarre pas, problème avec nodejs - #4 par akenad

akenad :slight_smile:

Merci gastonlag , oui j’ai deja essayé :

[/code] jeedom@jeedom:~ $ sudo npm install serialport
[sudo] Mot de passe de jeedom : 
npm WARN npm npm does not support Node.js v10.24.0
npm WARN npm You should probably upgrade to a newer version of node as we
npm WARN npm can't make any promises that npm will work with this version.
npm WARN npm Supported releases of Node.js are the latest release of 4, 6, 7, 8,                                                                                         9.
npm WARN npm You can find the latest version at https://nodejs.org/

> @serialport/bindings-cpp@10.8.0 install /home/jeedom/node_modules/@serialport/bindings-cpp
> node-gyp-build

npm WARN saveError ENOENT: no such file or directory, open '/home/jeedom/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/home/jeedom/package.json'
npm WARN jeedom No description
npm WARN jeedom No repository field.
npm WARN jeedom No README data
npm WARN jeedom No license field.

+ serialport@10.5.0
added 19 packages from 101 contributors in 16.663s [/code]

et pourtant toujours la meme erreur : Error: Cannot find module ‹ serialport › en relançant le demon , « npm WARN npm npm does not support Node.js v10.24. »

Merci Akenad , avec cette manip j’ai enfin une reinstall des dépendances , malgre tout j’ai un NOK a la fin avec des log qui semblent très corrects :

+ echo '*******************Begin of package installation******************'
*******************Begin of package installation******************
+ touch /tmp/jeedom_install_in_progress_rflink
+ echo 1
+ echo 2
+ sudo chmod +x /var/www/html/core/class/../../resources/install_nodejs.sh
+ sudo /var/www/html/core/class/../../resources/install_nodejs.sh
Hit:1 http://archive.raspberrypi.org/debian buster InRelease
Hit:2 http://raspbian.raspberrypi.org/raspbian buster InRelease
Hit:3 https://deb.nodesource.com/node_16.x buster InRelease
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
apt-utils is already the newest version (1.8.2.3).
build-essential is already the newest version (12.6).
git is already the newest version (1:2.20.1-2+deb10u7).
lsb-release is already the newest version (10.2019051400+rpi1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
[Check Version NodeJS actuelle : v16.19.0 : [  OK  ]
[Check Prefix : /usr and sudo prefix : /usr and www-data prefix : /usr : [  OK  ]
+ echo 3
+ sudo chmod +x /var/www/html/core/class/../../resources/install_nodejs.sh
+ sudo /var/www/html/core/class/../../resources/install_nodejs.sh
Hit:1 http://archive.raspberrypi.org/debian buster InRelease
Hit:2 http://raspbian.raspberrypi.org/raspbian buster InRelease
Hit:3 https://deb.nodesource.com/node_16.x buster InRelease
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
apt-utils is already the newest version (1.8.2.3).
build-essential is already the newest version (12.6).
git is already the newest version (1:2.20.1-2+deb10u7).
lsb-release is already the newest version (10.2019051400+rpi1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
[Check Version NodeJS actuelle : v16.19.0 : [  OK  ]
[Check Prefix : /usr and sudo prefix : /usr and www-data prefix : /usr : [  OK  ]
+ echo 4
+ echo 5
+ php /var/www/html/core/class/../php/jeecli.php plugin dependancy_end rflink
+ rm /tmp/jeedom_install_in_progress_rflink
+ echo '*******************End of package installation******************'
*******************End of package installation******************

J’ai donc relance une install du serialport car j’avais toujours une erreur Error: Cannot find module ‹ serialport › sur les log du lancement du demon :

jeedom@jeedom:~ $ sudo npm install serialport                                   npm WARN old lockfile
npm WARN old lockfile The package-lock.json file was created with an old version of npm,
npm WARN old lockfile so supplemental metadata must be fetched from the registry.
npm WARN old lockfile
npm WARN old lockfile This is a one-time fix-up, please be patient...
npm WARN old lockfile

up to date, audited 20 packages in 11s

12 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
npm notice
npm notice New major version of npm available! 8.19.3 -> 9.4.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.4.1
npm notice Run npm install -g npm@9.4.1 to update!
npm notice

dois je essayer un : sudo npm install -g --force serialport ?

MERCI vous etes au top ca avance

Il ne faut pas lancer n’importe quoi comme commande npm sans savoir ce que l’on fait.
ça peut installer les node modules pas au bon endroit pour une prise en compte par le plugin, voir rendre globalement incohérent une installation jeedom.

En résumé, ce qu’explique les 2 liens cités précédemment, c’est d’avoir :

-1)
Réglages > Système > Editeur de fichiers
plugins/rflink/plugin_info/packages.json

{
  "apt":{
    "nodejs" : {}
  },
  "npm" : {
      "plugins/rflink/resources": {}
    }
  }

/!\ ATTENTION : bien supprimer la virgule pour la clé npm qui existe dans le fichier initial.

Ce qui a pour effet d’installer les ressources qui vont bien dans :
plugins/rflink/resources/node_modules
entre autres serialport et telnet-client

-2)
créer le lien symbolique nodejs → node :
(car le plugin utilise la commande nodejs et l’installation de nodejs n’installe que la commande node pour le paquet nodejs v16 installé actuellement)
Dans
Réglages > Système > Configuration > OS/DB > Administration Système
taper la commande :

sudo ln -s 'which node' 'which node'js


Par ailleurs si nécessaire, pour rattraper le coup tu peux éventuellement sans garantie tenter de supprimer s’il existe le fichier : plugins/rflink/resources/package-lock.json

et relancer les dépendances

akenad :slight_smile:

Pour info :

jeedom@jeedom:~ $ sudo npm list --global
/usr/lib
├── corepack@0.15.1
├── npm@8.19.3
└── serialport@10.5.0

le fichier plugins/rflink/plugin_info/packages.json est bien conforme a ce que tu decris , et je n’ai pas de fichier plugins/rflink/resources/package-lock.json.

Par contre je n’ai plus de log package après reinstall des dépendances

Probablement parce que les dépendances ont été correctement installées lors du lancement de l’installation des dépendances précédente et qu’une nouvelle relance n’installe rien de plus.
Le résultat de l’installation des paquets se voit dans :
Réglages > Système > Configuration > OS/DB > Vérification des packages système

Package 			               Type 	Status 	Obligatoire 	Voulu par
nodejs				                apt	        OK	        oui		rflink
plugins/rflink/resources        npm	        OK	        oui		rflink

par ailleurs voir ce que je dis sur node et nodejs plus haut.

akenad :slight_smile:

Tout est OK

plugins/rflink/resources	npm	OK	oui rflink	0.0.1
nodejs	apt	OK	oui       rflink	16.19.0-deb-nodesource1

usbutils	apt	OK	**non** core	1:010-3

A propos du node JS c'etait correct aussi :

jeedom@jeedom:~ $  ls -ial /usr/bin/nodejs
218 lrwxrwxrwx 1 root root 13 févr.  5 18:23 /usr/bin/nodejs -> /usr/bin/node

Pour rappel : Log node

Sun Feb 05 2023 20:30:07 GMT+0100 (heure normale d’Europe centrale) - Jeedom url : http://127.0.0.1:80/plugins/rflink/core/api/rflink.php?apikey=xxxxxxxxxxx, gwAddress : /dev/ttyACM0
node:internal/modules/cjs/loader:998
throw err;
^
Error: Cannot find module 'serialport'
Require stack:
- /var/www/html/plugins/rflink/resources/rflink.js
at Function.Module._resolveFilename (node:internal/modules/cjs/loader:995:15)
at Function.Module._load (node:internal/modules/cjs/loader:841:27)
at Module.require (node:internal/modules/cjs/loader:1067:19)
at require (node:internal/modules/cjs/helpers:103:18)
at launchGateway (/var/www/html/plugins/rflink/resources/rflink.js:88:20)
at Object. (/var/www/html/plugins/rflink/resources/rflink.js:178:1)
at Module._compile (node:internal/modules/cjs/loader:1165:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1219:10)
at Module.load (node:internal/modules/cjs/loader:1043:32)
at Function.Module._load (node:internal/modules/cjs/loader:878:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [ '/var/www/html/plugins/rflink/resources/rflink.js' ]
}

Je suppose que :

sudo ln -s 'which node' 'which node'js

doit etre remplacé par :

sudo ln -s 'which node' 'which nodejs'

et seulement si le :

ls -ial /usr/bin/nodejs

donne :

ls: cannot access '/usr/bin/nodejs': No such file or directory

J’ai tout bon ?

Non.
ton lien symbolique est ok. Tu n’as rien à faire.

le fichier /plugins/rflink/resources/package.jon contient :

{
  "name": "JeedomRflink",
  "version": "0.0.1",
  "description": "Node to use Rflink with Jeedom",
  "license": "GPL-3.0",
  "repository": "npm/npm",
  "dependencies": {
    "request": "latest",
    "serialport": "~9.2.8",
    "telnet-client": "latest"
  }
}

sachant que les versions de nodejs et npm évoluent dans le temps, il est possible maintenant qu’il y ait un problème sur le choix de la version serialport par rapport à l’usage que le plugin en fait.
c’est aspect est à mon avis à ce stade à soumettre au développeur.
A noter par ailleurs que l’installation de nodejs/npm ne ce fait pas de la même manière entre le core jeedom et par exemple lors de l’installation des dépendances du plugin alexaapi.
Ce serait moi j’essaierais d’installer le plugin alexaapi et ses dépendances,
puis de revenir sur le plugin rflink, relancer l’installation des dépendances et redémarrer le démon.

Si ca ne fonctionne pas, en dernier ressort tu peux te refaire un jeedom puis directement appliquer ce que j’ai dis plus haut : Demon ne se lance pas: Error: Cannot find module ‹ serialport - #6 par akenad

akenad :slight_smile:

Bonjour Akenad ,

J’ai suivi tes conseils , en fait sans surprise tu avais raison j’ai reinstallé une distrib JEEDOM , relancé les dependances , recree les liens et tout est OK
Pour mémoire , il ne faut pas installer les modules npm ni nodejs a
la main comme je l’avais fait auparavent cela a corompu la reinstall des dependances.
Le fait d’installer le plugin alexapi n’a pas resolu le pb

encore un grand merci a la communauté et particulièrement a toi pour ton aide.

:slight_smile:

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.