Nodejs v12 has been released / Toward Nodejs v10 usage

À noter que pour l’instant nous ne pouvons pas utiliser cette version pour Duniter car les modules C++ reposent sur une abstraction, nan, qui ne supporte pas encore Node 12 :

A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10, 0.12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 and 11.

Il faut aller par étape. D’abord viser la v10, puis la v12.

Voici le ticket de gestion de la v12 pour nan.

Oui, visons déjà Node 10.

Petites mises Ă  jour :

  • wotb : compatible Node 8*, 9, 10, 11
  • naclb : compatible Node 8*, 9, 10, 11 (pourrait ĂŞtre avantageusement remplacĂ©e par node-sodium ? #1371)
  • scryptb : n’est plus nĂ©cessaire : Node 10 intègre directement cette fonction :+1: (mais pas Node 8 ni 9)
  • sqlite3 : compatible Node 8*, 9, 10, 11
  • leveldown : compatible Node 8*, 9, 10, 11

* : avec réserve

Étant donné cette nouvelle à propos de scryptb qui n’est plus nécessaire depuis Node 10 et qui est une dépendance assez lourde, et sauf contre-indication, je pense que l’on va abandonner le support Node 8 et 9 et se focaliser sur Node 10+ (#1373).

6 Likes

Ceci dit, depuis sa version 10 Node inclut une nouvelle API binaire N-API. Donc le passage Ă  Node 12 devrait se faire sans douleur Ă  condition de migrer nos binaires tels wotb vers N-API (#1370).

1 Like

Préviens-moi le jour où on bascule pour que je passe mes raspi de compil en node 10. :slight_smile:

1 Like

Si tu veux, tu peux tester les livrables ARM et Windows en récupérant la branche feat/node10.

Je viens d’essayer le livrable Linux Desktop, ça fonctionne très bien. :slight_smile:

Par contre je n’ai pas pu passer à node-sodium, compilation trop compliquée. Mais peu importe.

1 Like

J’ai essayé la version Windows, ça a l’air de fonctionner : la compil a réussi et le livrable se synchronise (je ne lui ai pas fait calculer de blocs).

Sur ARM la release plante. Je vais essayer de comprendre pourquoi.

3 Likes

La release ARM plante sur la compilation de nacl :

node-pre-gyp ERR! build error
node-pre-gyp ERR! stack Error: Failed to execute '/opt/nodejs/bin/node /opt/nodejs/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/tmp/build_duniter/releases/duniter/node_modules/naclb/lib/binding/Release/node-v64-linux-arm/naclb.node --module_name=naclb --module_path=/tmp/build_duniter/releases/duniter/node_modules/naclb/lib/binding/Release/node-v64-linux-arm' (1)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/tmp/build_duniter/releases/duniter/node_modules/naclb/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
node-pre-gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
node-pre-gyp ERR! stack     at maybeClose (internal/child_process.js:962:16)
node-pre-gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:251:5)
node-pre-gyp ERR! System Linux 4.4.48-v7+
node-pre-gyp ERR! command "/opt/nodejs/bin/node" "/tmp/build_duniter/releases/duniter/node_modules/naclb/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /tmp/build_duniter/releases/duniter/node_modules/naclb
node-pre-gyp ERR! node -v v10.11.0
node-pre-gyp ERR! node-pre-gyp -v v0.6.33
node-pre-gyp ERR! not ok
../functions.cc:2:17: fatal error: nan.h: No such file or directory
compilation terminated.
make: *** [Release/obj.target/naclb/functions.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/opt/nodejs/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Linux 4.4.48-v7+
gyp ERR! command "/opt/nodejs/bin/node" "/opt/nodejs/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--module=/tmp/build_duniter/releases/duniter/node_modules/naclb/lib/binding/Release/node-v64-linux-arm/naclb.node" "--module_name=naclb" "--module_path=/tmp/build_duniter/releases/duniter/node_modules/naclb/lib/binding/Release/node-v64-linux-arm"
gyp ERR! cwd /tmp/build_duniter/releases/duniter/node_modules/naclb
gyp ERR! node -v v10.11.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok

Pas sûr que je puisse vraiment y faire grand-chose. Une rapide recherche ne m’a mené nulle part…

Le log de la compil donne ça à la fin :

22527 verbose stack Error: naclb@1.3.11 install: `node-pre-gyp install --fallback-to-build`
22527 verbose stack Exit status 1
22527 verbose stack     at EventEmitter.<anonymous> (/opt/nodejs/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16)
22527 verbose stack     at EventEmitter.emit (events.js:182:13)
22527 verbose stack     at ChildProcess.<anonymous> (/opt/nodejs/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
22527 verbose stack     at ChildProcess.emit (events.js:182:13)
22527 verbose stack     at maybeClose (internal/child_process.js:962:16)
22527 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:251:5)
22528 verbose pkgid naclb@1.3.11
22529 verbose cwd /tmp/build_duniter/releases/duniter
22530 verbose Linux 4.4.48-v7+
22531 verbose argv "/opt/nodejs/bin/node" "/usr/local/bin/npm" "install"
22532 verbose node v10.11.0
22533 verbose npm  v6.4.1
22534 error code ELIFECYCLE
22535 error errno 1
22536 error naclb@1.3.11 install: `node-pre-gyp install --fallback-to-build`
22536 error Exit status 1
22537 error Failed at the naclb@1.3.11 install script.
22537 error This is probably not a problem with npm. There is likely additional logging output above.

Essaye ceci :

npm i -g node-pre-gyp
npm i -g node-gyp

Bizarre, la compil de nacl plante toujours avec la ligne suivante :

…/functions.cc:2:17: fatal error: nan.h: No such file or directory: Failed to exec install script

… mais le build continue quand même et produit un .deb. Le problème, c’est qu’il fait 66 Mo, contre 73.7 Mo pour la version compilée en node 9, j’en déduis (peut-être à tort) qu’il manque des choses dedans. Est-ce que ton .deb node 10 pour linux x86 est plus léger ou plus lourd que celui avec node 9 ?

Edit : je confirme, après install duniter ne se lance pas et plante en disant qu’il ne peut pas trouver le module …/app/lib/common-libs/exit-codes.

1 Like

Pour info : j’ai reproduit sur mon Raspi 3, mais je ne comprends pas d’où vient le problème d’autant plus que le projet naclb pris isolément compile très bien.

Cela dit je peux contourner le problème : naclb est « pre-gyp ready », c’est-à-dire que le binaire correspondant à l’architecture (ARM + Node 10) peut être publié à l’avance puis téléchargé lors du build, évitant d’avoir à le recompiler et donc de tomber sur l’erreur.

C’est déjà ce que je fais pour Windows, je pré-publie les binaires des modules wotb et naclb. Je ferai pareil pour ARM, j’essaie d’y penser pour le faire ce soir.

1 Like

En plus ça a l’avantage de raccourcir le build (dis-moi si je dis des bêtises…), non ?

Oui, de la compilation en moins :slight_smile:

1 Like

VoilĂ  !

  • le binaire naclb est publiĂ© pour ARM
  • le binaire wotb est publiĂ© pour ARM
1 Like

Ça a compilé. J’ai un problème sur le raspi que je n’ai pas sur le banana : sur raspi ça plante avec

Error: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `CXXABI_1.3.9’ not found (required by /opt/duniter/node_modules/wotb/lib/binding/Release/node-v64-linux-arm/wotb.node)

En cause libstdc++ 6.0.20 (il faut la 21). A priori pas vraiment de solution sur la raspbian basée sur Jessie. @cgeek quelle distro/version utilises-tu sur ton raspi ?

Sur mon banana qui est basé sur une ubuntu avec la 6.0.21, ça a l’air de passer nickel.

J’ai utilisé une Debian Stretch, la seule que j’avais sous la main.

Faut-il que je build avec une autre ?

Je pense qu’il vaut mieux compiler/builder sous Jessie. Je fais d’ailleurs exprès de ne pas mettre à jour car il me semble qu’il y en a encore d’autres qui sont sous Jessie et du coup, qui peut le plus peut le moins… :slight_smile:

J’ai fait cela ce midi sur une Jessie, pourrais-tu réessayer ?