Ce nouveau module appelé connect-coffee-script est un middleware Connect utilisé pour servir les fichiers JavaScript écrits en CoffeeScript. Ce middleware doit être utilisé par connect ou tout framework compatible Connect tel que Express et Zappa. Pour ceux qui ne sont pas familiers avec CoffeeScript, c’est un transpiler qui compile en JavaScript.

Mais d’abord, expliquons comment j’ai publié un tel module en juillet 2012. Jusque-là, j’étais extrêmement satisfait du middleware compiler présent dans Connect. Cependant, avec la dernière version de Connect et Express, les choses ont changé. J’ai eu beaucoup de mal à trouver un middleware qui transpilerait mes fichiers client CoffeeScript.

Toutes mes tentatives sur Google ont abouti au middleware connect-coffee qui est lui-même déconseillé en faveur de connect-assets. En regardant le readme, je dois avouer que je n’étais pas un grand fan au premier regard. Je ne pouvais tout simplement pas comprendre le concept global. De plus, je continue de penser que la layout par défaut utilisée par ce module est tout simplement mal adapté à mes projets. D’avantage de googling n’a pas aidé. Si connect-assets était la solution a mes problèmes, alors ainsi soit-il. Cependant, peut-être que je n’étais pas assez patient, je ne trouvais pas d’exemple clair sur la façon de l’utiliser. Après quelques essais et après avoir lu ces deux articles “NodeJS + CoffeeScript, render coffeescript compiled js on request” et “the connect middleware for coffeescript?” sur StackOverflow, je suis arrivé à la conclusion qu’il n’y avait probablement pas d’alternative simple et que je ne serai peut-être pas le seul intéressé.

À ma propre surprise, c’est ainsi que j’ai écrit ce module. Aussi, j’ai trouvé assez amusant de l’écrire lors d’une guerre publiqaue sur liste de diffusion de Node.js qui a commencé avec un sujet totalement différent.

Le code est fortement inspiré du middleware Stylus et fonctionne de la même manière. Pour toute requête http GET dont l’extension est “.js”, il recherche un fichier du même nom mais avec une extension “.coffee” sur un répertoire local, l’option src. Il recherche également un fichier du même nom et de la même extension sur un deuxième répertoire local, l’option dest. Si le fichier “.js” n’existe pas ou si sa dernière heure de modification est inférieure au fichier “.coffee”, il est généré à partir du fichier “.coffee”.

Cette approche est très performante, facile à configurer et transparente. Cela fonctionne aussi très bien avec le cache natif Connect et les middlewares statiques.

Vous trouverez des exemples dans le fichier README du projet GitHub ainsi que dans le dossier “sample”.