meteor

La plateforme JS 360°

par Evan Liomain

A propos de moi

Evan Liomain

evanliomain

Developpeur front @SFEIR

Quels sont les enjeux d'aujourd'hui et demain ?

  • mainframe
  • pc
  • web
  • Client connecté

Enjeux

  • UI/UX Moderne
  • Pas de rafraichissement manuel
  • Compatible tout navigateur, mobile et plus
  • Donnée en temps réel

Plateformes historiques du marché

.net rails
php java jee

Inconvénients

  • Langages client/serveur différents (hors java avec GWT)
  • Pas de partage de code entre client et serveur
    • donc pas d'isomorphisme possible

Solution

La plateforme JS

JS Big Picture

Historique de la plateforme MeteorJS

Qui est derrière le rideau ?

  • MDG : Meteor Development Group (fondé en 2011)
  • La communauté

Depuis combien de temps ?

Premier commit github le 18/11/2011

v0.0.40 le 11/12/2011

v1.0 le 17/03/2015

v1.1 le 31/03/2015

v1.2 le 21/09/2015

v1.3 le 28/03/2016

Les fonctionnalités de la plateforme

Ce que je peux faire avec

web
mobile
appli desktop
code server

Fonctionnalités du client en ligne de commande

Soft et framework associé

  • Base de donnée MongoDB 3.0 et MiniMongo
  • Gestionnaire de websocket
  • Moteur de templating :
    • Blaze, par défaut
    • AngularJS depuis 1.2
    • ReactJS depuis 1.2
  • Support de npm
    • Pour < 1.3
      • via un hack avec le package meteorhacks:npm
      • via un package wrapper pour Meteor
    • A partir de 1.3 : disponible en import direct

ES2015 Support

OS supportés

  • Mac OSX
  • Linux
  • Windows depuis 1.1

Installation / Création / Exécution / Déploiement

Installation

Pour Mac & Linux

curl https://install.meteor.com/ | sh

Pour Windows
installer

Création du projet


meteor create my-project
cd my-project
            
  • Fichier de demo : my-project.js, my-project.html, my-project.css
  • Répertoire : .meteor
  • Configure correctement les .gitignore

Lancement du projet en local

meteor

Déploiement sur un environnement de demo ou sur galaxy

meteor deploy my_awesome_project.meteor.com

Déploiement sur un autre serveur ?

Plus compliqué, mais peu être fait via des packages npm tierce comme :

Comment ça marche ?

Architecture générale

3 types de code

Dans le même fichier


if (Meteor.isServer) {
  // Exécuté sur le serveur
}

if (Meteor.isClient) {
  // Exécuté dans le navigateur web
}

// Exécuté sur le serveur et le client
            

3 types de code

Dans des fichiers différents

  • user
    • client
      • user.ui.js
    • server
      • user.publish.js
    • user.model.js

Quels fichiers sont buildés ?

  • code serveur : tous fichiers hors client, tests, public, et private
  • code client : tous fichiers hors server, tests, public, et private
  • asset serveur : tous fichiers contenus dans private
  • asset client : tous fichiers contenus dans public, servis tels quels
    • exemple : pour public/bg.png
      
      
                          

Dans quel ordre sont-ils buildés ?

Pour < 1.3

  • Template HTML en premier
  • Pour un répertoire donné, les fichiers :
    1. du sous-répertoire lib/ sont chargés en premier
    2. sont chargés par ordre alphabêtique
    3. des sous-répertoires (hors lib/)
    4. main.* sont chargés en dernier

Un peu de code

Utilisation d'un document MongoDB

Création

MyList = new Mongo.Collection('myList');

Récupération

MyList.find({});

Insertion


MyList.insert({
  text      : 'example',
  createdAt : new Date() // current time
});
            

Edition


MyList.update(this._id, {
  $set : { text : 'new example' }
});
            

Suppression


              MyList.remove(this._id);
            

Utilisation d'un package

Authentification OAUTH de google

Ajout des packages

meteor add accounts-ui accounts-google service-configuration

Création de votre projet sur la console google

Configuration (server)


ServiceConfiguration.configurations.upsert({
  service : 'google'
}, {
  $set : {
    clientId   : '{votre client id}',
    loginStyle : 'popup',
    secret     : '{votre secret}'
  }
});
            

Affichage


{{> loginButtons}}
{{#if loggingIn}} Vous êtes en cours de connexion {{/if}}
{{#if currentUser}} Vous êtes connecté {{/if}}
            

Retour d'EXpérience

Le projet

  • Une liste de course partagée
  • Authentification oauth google
  • Disponible en web app et mobile

La stack

  • Meteor 1.2
  • Angular 1.4
  • Angular Material

Points forts

  • Nul besoin de s'occuper de la gestion de la build
  • Base de donnée disponible sans effort
  • Données temps réel disponibles sans effort
  • Déploiement sur l'environnement de demo
  • Code serveur, client et mobile partagé
  • Livereload client et serveur
  • Package fullstack
  • Composant material-design à disposition
  • Simplicité d'utilisation d'angular

Points faibles

  • Build et livereload + lent qu'avec gulp ou webpack
  • Indisponibilité de la plateforme de demo pendant le chargement l'application par le serveur
  • Tout les développements devraient respecter les contraintes du mobile :
    • Taille de l'écran
    • Réseau lent
    • Gestion du touch
  • Changement d'API d'angular-meteor entre 1.2 et 1.3

Quelques liens utiles

Liens officiels

Quelques liens utiles

En français

Quelques liens utiles

Avec ReactJS

Quelques liens utiles

Avec AngularJS

Avez vous des questions ?