La MEAN stack Jean-Philippe FORESTIER (jpf@osyx.com) http://www.mean-stack.info Qu'est-ce qu'une stack? Une stack est une pile de technologies utilisée pour développer une application web. Une stack peut se caractériser par l'utilisation conjointe: d'un système d'exploitation, d'un langage de programmation, d'un système de gestion de bases de données d'un serveur web. 1
Qu'est-ce qu'une stack? Jusqu'à présent la stack la plus répandue est la stacklamp (Linux, Apache, MySQL, PHP). On ne la présente plus: elle est utilisée par une bonne partie des sites Web existants. Cette stack historique est aujourd'hui confrontée à une nouvelle stack très "tendance": la MEAN stack. MEAN vs LAMP MEAN est l'acronyme de MongoDB, Express.js, AngularJS, et Node.js. Dans la MEAN stack, le système Linux est remplacé par n'importe quel système sur lequel tourne Node.js. Le serveur Apache est lui remplacé par Node.js. MySQL est remplacé par MongoDB. Et le codage du site (fait en PHP dans la stack LAMP) est réalisé avec Express.js côté serveur et AngularJS côté client le tout en JavaScript. 2
MongoDB est une base de données NoSQL orientée document. Elle est "JavaScript-friendly": elle stocke les documents dans un format de type JSON, et propose une API et un shell JavaScript. MongoDB a été construit dans un but de simplicité d'utilisation couplé à de très bonnes performances et une bonne capacité de "scaling". 3
Node.js est une plateforme de développement JavaScript orientée applicatifs serveur. Node.js propose des bibliothèques d'entrées/sorties non bloquantes, fonctionne sur un mode événementiel et est orienté vers le développement d'applications temps-réel. Node.js utilise le moteur JavaScript V8 de Google afin d'apporter des performances optimales. Express.js est un framework MVC Web côté serveur conçu spécialement pour Node.js. Il permet de construire des sites complets de manière assez simple. Il s'agit du frameworkweb le plus utilisé à l'heure actuelle sous Node.js (mais ce n'est pas le seul). Pour faire une analogie, Express est à Node ce que Zend est à PHP. 4
AngularJS est un framework Web (côté frontend) développé par Google AngularJS permet de créer une application Web "Single Page" (SPA) en écrivant un minimum de code, en s'appuyant sur une architecture MV* et sur un mécanisme de liaison bidirectionnel simple et puissant. L'interface utilisateur est décrite dans un HTML légèrement étendu. JavaScript/JSON de bout en bout Utiliser un seul langage de programmation de bout en bout, y compris du côté base de données, facilite grandement le développement. MongoDB stocke les documents dans un format proche de JSON, ces documents JSON peuvent facilement être servis par Node.js et Express.js soit via le driver natif MongoDB soit via le module Node mongoose. 5
JavaScript/JSON de bout en bout Côté front-end, il est très facile de passer un objet JSON à AngularJS qu'il pourra très facilement stocker dans le "scope" (le modèle pour AngularJS). Avec la MEAN stack, il n'y a plus de différences entre les objets manipulés côté front-end et côté back-end: les données sont les mêmes, et, plus important, le format des données est le même. Installation/Distribution Vous pouvez installer chaque élément de la MEAN stack l'un après l'autre en commençant vraisemblablement par MongoDB (indépendant des autres éléments) et Node.js (la plupart des autres éléments sont proposés sous la forme de modules npm, lui-même étant un outil Node.js). Une autre option est d'utiliser des distributions toutes faites (un peu comme LAMP ou WAMP dans un autre contexte): MEAN.io ou MEAN.js. 6
Installation/Distribution MEAN.io et MEAN.JS sont 2 distributions issues d'un même développeur (Amos Haviv). La première distribution développée est MEAN.io (reprise ensuite par la société Linnovate). En conflit avec Linnovate, Amos Haviv décide de créer un fork: MEAN.js Installation/Distribution Les 2 distributions sont assez proches, voici quelques points qui les distinguent: MEAN.js utilise Yeoman, alors que MEAN.io a son propre outil de "scafolding", MEAN.js propose une documentation plus fournie, MEAN.io est utilisée par une communauté plus importante. D'autres "Stacks" existent, plus ou moins éloignées de la MEAN Stack: elles se distinguent souvent par la base de données utilisée ou par le framework employé pour le front-end. 7
La MEAN Stack, pour quel usage? La MEAN Stack est utilisée aujourd'hui pour développer toutes sortes d'applications Web: des plateformes de type CMS ou blogging comme Ghost et PencilBlue, en passant par les portefeuilles numériques comme Ziploop jusqu'aux magasins en ligne comme StoreHippo. Néanmoins, la stack LAMP (et les autres stack: JEE,.Net, ) restent d'actualité et la MEAN stack ne prétend pas les remplacer. 8