Javascript all the things .. or not ?

Depuis deux semaines, je me suis remis avec intensité (et sous la contrainte)  au développement Javascript dans un univers proche du navigateur classique, mais pas tout à fait semblable.

Et je dois dire que, si certaines choses ont changé, d’autres sont toujours aussi décevantes.

Typiquement, je suis déçu d’avoir passé DEUX JOURS ENTIERS pour détecter que je passais un argument undefined à une fonction. Surtout que c’est arrivé alors que j’utilise Eclipse avec son mode Javascript, qui est censé m’afficher quelques erreurs (mais qui n’est apparement pas dérangé par l’utilisation de variables non définies … à moins que ça ne soit configurable).

L’autre déception, mais je m’y attendais, c’est nodeJS et son écosystème authentiquement merdique. Je m’explique.

Vous pensez que nodeJS est un framework permettant de développer des applications web côté serveur, pas vrai ? Moi, en tout cas, je le croyais. Jusqu’à ce que je découvre que, via NPM, Grunt, Bower, et tout un tas de projets concurrents aux noms de hipsters mal dégrossis, les développeurs Javascripts sont censés être capables d’en faire l’équivalent de maven. Sauf que, d’une part, personne ne s’est dit « tiens, si on faisait tourner maven dans Tomcat ? », et que d’autre part le tri évolutif n’a pas encore lieu : il y a pour chaque besoin au moins deux outils concurrents, à peu près aussi peu fiables l’un que l’autre, et toujours très mal documentés. En bonus, quand vous commencez un projet, que node commence par installer tout un tas de trucs sur votre machine, et que le fichier package.js ne semble pas vraiment utilisable pour ajouter des dépendances (on me dit toujours de faire npm install bidule), ben ça fait bizarre.

Surtout quand, d’un autre côté, grâce aux Webjars découverts dans Wisdom, gérer des dépendances Javascript dans un projet Maven est d’une simplicité proprement biblique.

Et il y a d’autres bonnes nouvelles …

La première va vous paraître typique du développeur Java fou, mais est en fait plus qu’appréciable dès que le projet grossit un peut (et comme j’ai déja 700 fichiers, on peut dire que c’est déja un gros projet, je pense).

C’est requirejs.

Cette petite librairie, à la documentation rigolote, permet à peu de frais de faire de l’injection de dépendance en Javascript d’une façon qui, sans atteindre la complexité de CDI et de ses scopes/produces/… est quand même vraiment très pratique. Et par très pratique, je veux dire absolument indispensable si on ne veut pas pourir son namespace global avec des tonnes de variables à la noix.

La seconde est un peu une conséquence de la première.

En fait, à l’origine, je voulais suivre le mouton et développer une application AngularJS tout ce qu’il y a de plus traditionnel. Bon, je savais aussi que j’allais avoir vraiment besoin de requirejs. Je ne me voyais donc pas charger une partie de l’application avec requirejs, et en utiliser une autre sans. J’ai donc cherché pendant une journée ou deux comment faire marcher angularJS avec requirejs. Mais aucune des solutions que j’ai vu ne m’a réellement satisfait. Oui, il y a douze réponses sur StackOverflow pointant sur autant de projets nodeJS dans GitHub. Mais

  1. Vous pouvez relire ce que j’ai écrit plus haut sur nodeJS
  2. Même en copiant le code dans mon projet, ça n’a jamais fonctionné de façon convaincante.

Du coup, j’ai du chercher un peu plus.

Et je suis tombé via todoMVC, sur Ractive. Ractive, c’est l’outil de génération d’interface Javascript sympa : il s’insère facilement dans un projet requirejs, il fournit des templates en HTML également chargeables avec requirejs, il veut bien travailler avec jQuery quand il faut, et surtout il est simple à comprendre : pas besoin d’une tripotée de contrôlleurs,factories, et autres idées pénibles issues des plus mauvaises interprétations du MVC (oui oui, je le reproche bien à AngularJS). Non. Il se contente de fournir des contrôleurs, des vues, et des modèles. C’est facile à utiliser, rapide à comprendre, et ça fournit de belles interfaces graphiques.

Bon, en même temps, je sais que l’écosystème Javascript est comme ça depuis ma lecture de Javascript, the world most misunderstood language il y a bien longtemps. Cela dit, j’aime bien l’idée de passer à un langage fonctionnel, sauf lorsque je dois faire (comme c’est le cas aujourd’hui), du code récursif et asynchrone – heureusement qu’il y a les Deferred de jQuery, sinon ce serait authentiquement impossible. En parlant de ça, je ne comprend pas trop le débat sur les Promises/A et les Promises/B. Ca donne l’impression que la communauté Javascript n’a pas de JCP …. oui, je sais, il n’y en a pas, et c’est bien dommage.

Une réflexion sur “Javascript all the things .. or not ?

  1. Pingback: Procrastination ? | riduidel's wordpress

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s