af83

Quel système de gestion de packages pour Node.js ?

Everyone loves books but  I thought this was the dullest photo i had ever taken. I guess not.

Dès que l'on utilise un langage de script et que l'on commence à avoir quelques bibliothèques, on arrive très rapidement à avoir besoin d'installer facilement ces bibliothèques, à les garder à jour et à gérer des dépendances entre les bibliothèques. Par exemple, si vous souhaitez développer une application web en node.js, vous allez sûrement utiliser une bibliothèque pour faire le routage, une autre pour faire le templating, etc.

La solution la plus populaire actuellement semble être Kiwi. Ce gestionnaire de paquets s'inspire très fortement de Rubygems. Il profite donc des bons cotés des gems ruby comme la simplicité d'installation d'un paquet :

$ kiwi install haml

Malheureusement, l'expérience montre que Rubygems n'est pas un si un bon outil que ça sur le long terme. Voici quelques uns des défauts de Rubygems, et donc de Kiwi :

  1. Déployer les mêmes versions d'une application sur plusieurs environnements peut être problématique (pour Ruby, la solution consiste à passer par un deuxième outil : Bundler).
  2. Les bibliothèques deviennent difficiles à packager. Pour compenser, on en revient à écrire des recommandations pour les dévs, des explications sur les bonnes pratiques à respecter ou la liste des choses à ne pas faire.
  3. Mettre les paquets chacun dans leur répertoire pose également des problèmes qui vont plus loin que le packaging. Cela va également à l'encontre de l'intégration avec bon nombre d'outils UNIX. On peut, par exemple, citer le cas des pages man (que l'on peut résoudre par gem-man, mais ça reste un palliatif).

Au final, je préférerais donc que l'on tire des enseignements de Rubygems et qu'un autre système de gestion de packages s'impose pour Node.js. Il existe d'ailleurs des alternatives à Kiwi : npm, mode et SeedJS. SproutCore a d'ailleurs présenté SeedJS le week-end dernier lors de la JSConf, et son support des modules CommonJS me paraît très intéressant.

blog comments powered by Disqus