De bonnes bases & formations pour des frameworks Node.js


#1

Vous le savez certainement, mais les frameworks Node.js pullulent en permanence, chaque année apportant son nouveau lot de “This is a revolution, you must abandon everything and use our product”. En témoigne ce strip de CommitStrip très représentatif de la chose.

Sauf que bon.

Je me suis mis à NodeJS lorsque j’ai découvert Grunt, puis Gulp, mais rien de tout ça ne concernait des applications web.

L’an dernier j’ai tenté de me former en solo à un framework Node.js, ce fut un échec : pour un mec comme moi qui vient de PHP et qui fait uniquement du PHP et du JS (côté client seulement) depuis dix ans, surtout après avoir lu les PSR (PHP Standard Recommendations) et vu la documentation de Symfony, le tout, accompagné des cours d’OpenClassrooms, aujourd’hui, le moindre framework Node.js est obsolète dès sa release en v1, et toutes les documentations à son sujet sont caduques au bout de quelques mois à peine.

Du coup, je pose ici plusieurs questions :

  • Existe-t-il de réels standards de codage en Javascript ?

Il en existe sur PHP, par exemple, mais en JS on a aussi besoin de standards qui permettent dans un premier temps de structurer le code intelligemment ? (je ne parle pas de MVC, mais plutôt de concepts d’inclusion/require-like, structure d’un module, d’un framework, etc.)

  • Est-ce qu’un vrai expert Node.js, ça existe vraiment aujourd’hui ?

Je veux dire, étant donné la quantité astronomique de modules Node.js, ainsi que la surabondance de dépendances dans nos fichiers package.json, qui conduisent à parfois à des centaines de dépendances, les changements constants dans la communauté, l’avènement des compilateurs/transpileurs, la déprécation envisagée de certains gestionnaires de packages (a.k.a. Bower), etc., tout ça est en perpétuel mouvement, et un vrai “expert” devrait connaître au moins 1 framework “sur le bout des doigts”, ou alors a contrario avoir déjà bien testé toutes les nouveautés.

  • Quels sont les meilleurs moyens de se former sur des frameworks Node.js ?

J’ai personnellement tenté Express.js et j’ai compris les bases, mais il manquait beaucoup de choses, ensuite j’ai tenté d’apprendre à utiliser Sails.js par deux fois (à 10 mois d’intervalle), mais à chaque fois, la quantité astronomique de concepts n’est pas suffisamment bien documentée à mon goût, sans compter la documentation qui est désuète quelques mois plus tard (j’ai suivi la doc officielle de Passport.js pour faire une authentification à la con, impossible de le faire fonctionner, et le problème c’est que même pour cette simple bibliothèque, la documentation ne me semble pas suffisamment claire non plus, puisqu’elle est sortie du contexte du framework dans lequel on l’utilise…


Aujourd’hui je suis extrêmement frustré parce que j’ai envie de développer un mini-jeu web qui me trotte dans la tête depuis longtemps, mais j’ai besoin de websockets, je voulais utiliser un framework Node.js pour avoir tout-en-un et me former également sur Express/Sails, mais avec le simple fait que l’authentification ne fonctionne pas m’a totalement refroidi après les dizaines d’heures que j’ai passées à comprendre les concepts (requête, websocket, templating, configuration, policies, etc.).

Du coup, aujourd’hui, techniquement je cherche à me former pour pouvoir développer mon jeu, mais je commence à me résigner et à me dire que je ferais mieux de le faire en PHP, vu que le framework Node.js que j’utiliserai va forcément être obsolète à un moment…


#2

Salut Humancoders et désolé du up,

Personne de motivé pour faire un crawler du repo npm, normaliser et (re)générer tous les commentaires et ainsi générer toutes les doc avec un portage en markdown puis push le tout sur un domaine ?

Blague à part, quand vous avez une option que vous trouvez dans un autre langage ou framework, suffit de faire une recherche avec ce même mot “du langage” pour trouver ce qu’il vous faut dans un autre langage

PHP Websocket https://www.qwant.com/?q=PHP+websocket&client=opensearch

PHP multithreading / mutex https://www.qwant.com/?q=php%20multithreading&t=all

mais les pattern de conception back-end comme front-end risques de changer cette année avec les service workers (push payload, message relay, fetching ressources, data en push mais sans notification, json cache, service worker as virtual server). Suivant votre projet, c’est peut-être une piste à explorer avant de penser au socket https://developer.mozilla.org/fr/docs/Web/API/Service_Worker_API

J’ envisage d’abord cet ordre avant d’apprendre un truc

1 ce que je viens d’écrire ci-dessus ou si vraiment le langage envisagé est le langage parfait pour le projet alors “Run with it” (pour ma part la “politique” du “Run with it” fonctionne bien et je m’adapte facilement pour autant que c’est un langage avec “bracket”, les langage indenté, j’accroche pas du tout).

2 Du coup, j’envisage tjs d’abord la/les docs officielles http://expressjs.com/en/4x/api.html

3 Si vraiment la/les docs sont pauvres, alors je fais un “live test - hello world” et je regarde surtout le “coding style” que la solution engendre et en gros je benchmark la facilité d’apprentissage) sinon, ensuite, je répond à ta question (trouver un cours), il y a quelques plateformes (autre que OCR aka SDZ)

https://cs50.harvard.edu/

https://coursmos.com/discover/courses?type=free

Il y a surement moyen de trouver son bonheur avec ces liens

Cordialement,

Laurent


#3

Bonjour,

Pour ma part j’utilise Node Atlas (https://node-atlas.js.org) c’est un framework NodeJS simple à prendre en main et puissant !
Je fait du websocket avec, Jai suivi les tutos du site officiel pour la prise en main. Le développeur principal est un français qui répond rapidement aux sollicitations. :-)

Pierre


#4

Bonjour @Pierstoval,

Est-ce qu’un vrai expert Node.js, ça existe vraiment aujourd’hui ?

Je ne sais pas vraiment ce qu’est un vrai expert Node.js. J’imagine que c’est avant tout un expert JavaScript qui connait surement très bien son implémentation dans les navigateurs mais surtout dans Node.js.

En ce qui concerne JavaScript, il y a énormément de concept qui me viennent à l’esprit et qui n’existe pas dans d’autres langages (prototypage, boucle d’évènement…).

Je venais initialement du monde PHP il y a quelques années si tu veux tout savoir, et je suis tombé amoureux de JavaScript grâce à jQuery.

À présent, et après une étude approfondie de JavaScript qui m’a mené à bien distinguer

  • le JavaScript défini par ECMAScript,
  • son implémentation dans les navigateurs apportant l’API
      • window (le navigateur) ,
      • document le DOM,
      • les API HTML5
  • son implémentation dans Node.js
      • require/exports
      • API HTTP / HTTPS
      • API File System

Et une utilisation de divers module dans la jungle NPM.

Existe-t-il de réels standards de codage en Javascript ?

JavaScript

Oui, il sont défini d’une part par ECMAScript. ECMAScript a des versions, la courante et bien rependu est la 5. Ça avance plus vite depuis, il y a la 6, 7 et même la 8 en cours de rédaction (Merci @Delapouite). Cela défini JavaScript tel qu’il est hors de toutes implémentations. On parle de ES5, ES6 et ES7 en référence aux versions des features ou encore de ES2015, ES2016 en référence aux années des features.

Implémentation cliente

Il y a JavaScript en tant que tel, tel qu’il a été implémenté à partir des spécifications dans les différents navigateurs, Old IE, Firefox, Chrome, etc. Chacun tente de suivre la specs et leur implémentation dans leur propre moteur (chercher “moteur javascript”)

Chacun a donc sa propre référence sachant que, mettant IE de côté, chacun intègre convenablement ES ces dernières années.

La spec MDN est bien fournit : (chercher “mdn javascript”)

Implémentation serveur

Le moteur d’implémentation de Chrome, V8, est celui qui a été utilisé comme socle à Node.js et sur lequel ont été développé les API permettant de manipuler le system de fichier de tous les OS compatible Node.js ou d’utiliser le protocole HTTP. Là aussi c’est bien documenté : (chercher “node.js doc”)

Quels sont les meilleurs moyens de se former sur des frameworks Node.js ?

Je ne les connaît pas tous mais voici le miens :

  • Si tu es développeurs Front-end et que tu as déjà pas mal joué avec jQuery ou que tu es plus avancé
  • Si tu es développeurs PHP, etc. et que tu as l’habitude de MVC (ou non).

Je développe (avec l’aide de qui voudra bien me rejoindre) le framework Node.js NodeAtlas dont la principale mission est d’être « Évolutif » et d’offrir une courbe d’apprentissage linéaire. Il permet d’entrer progressivement dans le monde de Node.js et de commencer sans peine à faire :

  • Des templates HTML
  • Des sites web
  • Des applications web
  • Des API distante REST

La communauté que j’aimerai créer autour serait principalement française. Je l’utilise au quotidien depuis ses fondements.

Comme Sails.js, il repose sur Express et Socket.io mais cela est totalement transparent tant que tu n’arrives pas dans les profondeurs du développement Node.js, tu as donc le temps de découvrir en étant Productif.

Ce que Vue est a Angular ou React en terme de versatilité, simplicité d’apprentissage et bien NodeAtlas l’est a Sails, Express ou Socket.io.

Je serais vraiment ravi de t’aider à débuter ton aventure par ce biais avec d’autres

Jette un oeil au site officiel NodeAtlas : https://node-atlas.js.org/ et si tu te lances, n’hésite pas à passer sur le canal d’aide au développement français : https://gitter.im/NodeAtlas/Aide

En espérant vraiment pouvoir t’aider à entrer dans l’écosystem Node.js ;)


Comment bien démarrer avec NodeJs ?
#5

Non, la 6 a été ratifiée en juin 2015, et la 7 en juin dernier. C’est la 8 qui est en cours de rédaction et sera officiellement publiée en juin.


#6

Merci pour toutes ces réponses :)

J’ai “examiné” un peu la politique de NodeAtlas, j’aime beaucoup, ce que j’aime moins en revanche c’est le “cloisonnage” à la communauté francophone : on se passe du coup de l’internationalisation générale de la communauté (très productive & efficace quand on fait de l’open-source).

Après, je n’ai pas testé le framework, mais je pense que je l’essaierai à l’occasion :)

Pour info, après vos réponses, je me suis lancé beaucoup plus avant dans NodeJS avec Sails.js, justement, et j’ai réalisé un petit projet de base, pour apprendre à m’en servir, en faisant un mini-jeu web. (pour tout dire je pensais utiliser Phaser.io pour l’UI et j’ai opté pour un truc perso en ES6, pour me forcer à faire du “vanilla” sans lib externe).

On peut voir le code ici : https://github.com/Pierstoval/SoundGame (et un lien vers le jeu hébergé sur heroku est dispo aussi).

Évidemment, tout ne fonctionne pas, mais j’ai au moins acquis les connaissances nécessaires et je pense (je l’espère en tout cas) avoir réussi à développer quelque chose de propre. Par contre, pas de framework frontend, pas d’API REST (pas besoin pour l’instant).

Du reste, j’ai découvert http://jstherightway.org/ qui permet visiblement d’avoir une liste de standards & recommandations très intéressante sur le développement en JS, donc je vais explorer ça aussi dans le futur pour avoir encore plus d’informations sur les design patterns spécifiques à Javascript :)

En tout cas je suis content de voir que cet article (qui était à la base un “coup de gueule” sur la galaxie JS très mouvante) a suscité des réponses aussi cordiales et compréhensives :)


#7

Merci pour ton retour !

Je me suis découvert l’âme d’un artiste avec ton jeu ;)

Tu es déjà la seconde personne à trouver cela dommage (« cloisonnement »), la communauté international n’est pas oubliée au contraire et la documentation est intégralement disponible en EN. Le code source de node-atlas.js est lui-même en anglais bien entendu :

Si du monde est intéressé pour offrir une traduction anglaise plus décente, il est le bienvenue. La partie anglaise sera mise en avant au profit de la FR (niveau com’) quand il y aura plus de personnes dispos pour une localisation plus professionnelle.


#8

Eh bien si jamais mon code actuel peut être migré vers NodeAtlas, je m’y intéresserai :)