SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
JavaScript : le
futur, c’est
maintenant !Un atelier de àChristophe Porteneuve MS experiences 2016
whoami
var christophe = {
age: 38.91991786447639,
family: { wife: 'Élodie', son: 'Maxence' },
city: 'Paris, FR',
company: 'Delicious Insights',
trainings: ['JS Total', 'Node.js', 'Git Total'],
webSince: 1995,
claimsToFame: [
'Prototype.js',
'Ruby On Rails',
'Bien Développer pour le Web 2.0',
'Prototype and Script.aculo.us',
'Paris Web'
]
}
ES2015+
gni ?!
ES6 ou ES2015 ?
Rappel : ES = ECMAScript = standard officiel de JavaScript.
Avant 2015, on disait ES6, ES7…
Par exemple, ES3 = 1999, ES5 = 2009, ES6 = 2015
Mais depuis 2015, on sort une version par an (en juin).
On « met la pression » de tenue à jour en numérotant par
année.
Les noms officiels sont donc désormais ES2015, ES2016,
etc.
Et si on avait besoin de
rien ?
La prise en charge native est bien meilleure que ce qu’on
croit.
Edge 14 = 93%
Firefox 52 = 94%
Chrome 53 / Opera 40 = 97%
Safari 10 (dont iOS 10) = 100%
Node 6.5 = 97%
Et « 90 % » ça suffit en général largement
OK mais… dans la vraie
vie…
Pas encore de solution propre aux modules ES2015 natifs.
Vous savez ce truc qui déboîte :
import React, { PropTypes } from 'react'
export default function Gauge ({ value, max = 100 }) {
return <LinearProgress mode='determinate' value={value} max={max} />
}
IE (même 11), Firefox < 45, Chrome < 49, Opera < 36, Safari
< 10, iOS < 10, Node < 6, Android Browser…
Et ES2016+, alors ?
En plus on n’a parlé que de ES2015 là, mais on a ES2016,
non ?
Et l’an prochain, avec ES2017 on fait quoi ? Et l’année
d’après ?
ça roxxe des poneys
Principe
Transpileur : source ➡ autre source
En l’occurence, « autre source » peut descendre jusqu’à
ES5
L’idée : utiliser les dernières specs aujourd’hui (du moment
qu’elles sont transpilables).
La performance n’est, en pratique, pas un problème.
(En pratique, presque tout ES2015 est transpilable, sauf les proxies)
Babel et l’écosystème JS
Babel est téléchargé (npm) plus de 57K/jour
Environ 2 000 modules en dépendent
Quand Babel a un souci, l’écosystème JS a chaud…
(on y reviendra)Intégré avec l’univers
A permis l’essor (enfin !) d’ES2015+ dans des projets de
premier plan (React, Ember 2, Aurelia, JSPM…) et leurs
utilisateurs (Facebook, Airbnb, Instagram, etc.)
Pérennité de Babel
Né en 2014, le bébé de Sebastian McKenzie .
Désormais 250+ contributeurs.
Comme Facebook l’a jugé critique à la mission, ils ont fait
comme d’hab’ : on embauche le créateur et les plus gros
contributeurs, juste pour continuer.
Élément critique d’infrastructure pour beaucoup de grosses
boîtes, et 100% FLOSS, donc on est tranquilles.
On aura toujours besoin de Babel pour jouer tôt avec les
fonctionnalités futures (ce qui est essentiel au processus du
TC39).
Inutile de tout transpiler !
Depuis Babel 6, on choisit les syntaxes qu’on veut transpiler.
Tout le reste est laissé tel quel (considéré natif).
Plus la prise en charge native augmente, moins on a besoin
de transpiler de portions de code. On a tout intérêt à éviter
l’approche « bulldozer » hors des PoC / démos / tutos.
On gagne en perfs au build (transpilation) et à l’exécution
(code natif plutôt que polyfillé).
Notez toutefois que le code transpilé par Babel a des performances remarquables.
Plugins
Syntaxes et transforms
Un plugin de syntaxe permet au parser de reconnaître une
syntaxe au sein du flux JS. Mais Babel ne la transpile pas
pour autant.
Un plugin de transform(ation) applique le transpiling
correspondant pour aboutir à de l’ES5. Ils exploitent
automatiquement les éventuels plugins de syntaxe dont ils
ont besoin.
Mais  : Babel propose actuellement plus de
60 transforms, dont 21 rien que pour ES2015 !
ça fait du monde
Presets
On a donc la notion de preset : des groupes thématiques de
plugins pour un but précis. On en compte…
5 officiels (es2015, es2016, es2017, latest et
react),
4 expérimentaux dédiés aux stades TC-39 (stage-0 à
stage-3),
et plus de 750 communautaires !
Par exemple, latest transpile l’univers (tout ES2015+),
mais les contribs ont latest-minimal, idéal en Node, qui
feature-detect point par point
On peut bien sûr mélanger presets et plugins spécifiques.
Bien plus qu’ES2016
On l’a vu, Babel gère déjà ES2016, ES2017, et les stades
qui alimenteront les versions ultérieures. Par exemple :
object spread/rest et static, qui sont au stade 2
le binding operator qui est au stade 0
Mais on a aussi des plugins (officiels !) de syntaxes tierces
(notamment JSX et les annotations Flow), de conversion de
modules (ex. ES2015 ➡ CommonJS), de minification /
optimisation (notamment pour React).
Comment je lui dis ?
Soit via un fichier .babelrc (marche partout)
Soit via une clé "babel" dans le package.json (si tu
transpiles au sein d’un script npm).
{
"presets": ["latest-minimal"],
"plugins": [
"transform-object-rest-spread", "transform-class-properties",
"transform-function-bind"
]
}
Du coup il faut avoir les modules :
npm install --save-dev babel-preset-latest-minimal 
babel-transform-object-rest-spread babel-transform-class-properties 
babel-transform-function-bind
Jusqu’où je
« babelize » 
?
Côté browser (si IE9+)
En gros, il te faut tout. IE9 a 100% d’ES5 (hors le mode
strict), mais 0% d’ES2015. IE10 en a 3%, IE11… 11%. Donc
bon.
"presets": ["es2015"] // ou "latest" si tu veux E2015+
Côté browsers
(evergreens)
Tu prends les 2 dernières versions (façon Autoprefixer), tu
examines tes besoins et la , et tu listes
ce qui manque… Exemple :
table de compatibilité
"plugins": [
"transform-es2015-parameters",
"transform-es2015-destructuring",
"transform-es2015-spread",
"transform-async-to-generator",
"transform-transform-runtime",
"transform-regenerator"
]
(Pour Safari, qui rame loin, j’ai limité à 10+)
Node 4.x LTS
On a des , maintenus par la communauté.
Exemple :
presets dédiés
"presets": ["es2015-node4", "es2016-node4"], // ou ["latest-minimal"]
"plugins": ["transform-regenerator"]
Mais c’est bon avec Node 4, là… Dans quelques jours la
nouvelle LTS c’est Node 6 !
Node 6.x LTS
Excellente prise en charge native de ES2015+, le preset
communautaire est donc nettement plus léger.
"presets": ["latest-node6"] // ou ["latest-minimal"]
Electron
Electron 1.4.1 est basé sur Chromium 53, Node 6.5 et v8
5.3, autant dire que vous avez un gros, gros paquet d’ES
pris en charge en natif (quasiment tout ES2016 et diverses
parties d’ES2017).
Vu que le v8 est partagé, la meilleure approche est sans
doute :
"presets": ["latest-minimal"]
Comment j’intègre Babel dans
mon EDI ?
Visual Studio Code
ext install vscode-babel-coloring
ext install theme-monokaiextended # meilleure différenciation visuelle
Visual Studio
dans la dernière version.ES2015 est pas mal intégré
(mais vous n’aurez pas d’image parce que VS 2015 Community est trop gros pour mes VM Windows)
JetBrains
(IntelliJ, WebStorm, PHPStorm, etc.)
Les versions 2016 récentes (ex. +)
intègrent ES2015 en natif, ainsi que Babel comme watcher.
WebStorm 2016.2
Eclipse
#compassion
Désespérément à la rue (et lent, et lourd…) mais de
valeureux membres de la communauté maintiennent
, basé sur l’excellent .
Tern
IDE Tern.js
Comment j’intègre Babel dans
mon éditeur ?
Sublime Text 3
Installer puis le paquet (pas le paquet
ES.Next). Idéalement, faire de « JavaScript (Babel) » la
syntaxe par défaut pour les fichiers .js.
PackageControl Babel
Atom
Bonne prise en charge en natif ; nombreuses extensions
possibles avec les paquets et .language-babel atom-ternjs
Brackets
Gestion correcte en natif, on aura besoin de l’extension JSX
si on utilise cette syntaxe complémentaire.
Notepad++
Non, je plaisante.
Sidéré qu’autant de que des gens s’en servent encore…
Vim
Évidemment, on peut tout faire.
Les trois plugins les plus utilisés sont ,
et .
vim-javascript vim-jsx
es.next.syntax.vim
Emacs
Évidemment… on peut tout faire.
Manifestement, le plugin populaire est .js2-mode
Comment j’intègre Babel dans
mon
éditeur/EDI
en ligne ?
JSBin
Il suffit de choisir le mode ES6 / Babel (ou JSX) dans la liste
de syntaxes pour le panneau JavaScript.
Attention, il utilise JSHint par défaut plutôt qu’ESLint, ce qui
rend moins pratique la prise en charge d’ES2015.
CodePen
Il suffit de choisir Babel comme préprocesseur dans les
réglages du panneau JavaScript.
JSFiddle
Il suffit de choisir Babel comme langage dans les réglages
du panneau JavaScript.
Cloud9
ES2015+ et Babel pris en charge nativement.
Comment j’intègre Babel dans
ma chaîne de
build ?
Browserify
C’est le transform qui fait l’interface. CLI :babelify
$
$
npm install --save-dev babelify babel-core 
babel-preset-latest babel-preset-react
browserify index.js -o bundle.js -t babelify --presets latest react
Ou dans votre script de bundling :
var fs = require('fs')
var browserify = require('browserify')
browserify('./index.js')
.transform('babelify', { presets: ['latest', 'react'] })
.bundle()
.pipe(fs.createWriteStream('bundle.js'))
Webpack
On utilise le . La config ressemble à ceci :babel-loader
// …
module: {
// …
loaders: [
// …
{
test: /.(?:jsx?|es6)$/,
exclude: /(?:node_modules|bower_components)/,
loader: 'babel',
query: { presets: ['latest', 'react'] }
}
// …
]
// …
}
Rollup
Le plus simple, c’est le plugin babel
$ npm install --save-dev rollup-plugin-babel babel-preset-es2015-rollup
Dans la config Rollup :
import json from 'rollup-plugin-json'
import babel from 'rollup-plugin-babel'
export default {
entry: './index.js',
format: 'cjs',
plugins: [ json() , babel() ],
dest: 'bundle.js'
};
L’activation du preset se fait par un fichier .babelrc.
Gulp
Naturellement, on a . Pour la version avec les
sourcemaps, ça donne un truc dans ce style :
gulp-babel
var gulp = require('gulp')
var sourcemaps = require('gulp-sourcemaps')
var babel = require('gulp-babel')
var concat = require('gulp-concat')
gulp.task('default', function () {
return gulp.src('src/**/*.js')
.pipe(sourcemaps.init())
.pipe(babel())
.pipe(concat('bundle.js'))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('dist'))
})
Là aussi, configuration externe par .babelrc.
Grunt
Pas de surprise : il y a . Exemple :grunt-babel
require('load-grunt-tasks')(grunt)
grunt.initConfig({
babel: {
options: { sourceMap: true },
dist: {
files: { 'dist/bundle.js': 'src/**/*.js' }
}
}
})
grunt.registerTask('default', [ 'babel' ])
Et re-configuration par .babelrc.
T’as pas parlé du mien !
Moi non, mais je suis sûr que .Babel oui
D’autant que la majorité de ces intégrations sont officielles,
maintenues au sein du projet Babel.
Et
TypeScript ?
TypeScript vs. ES2015+
TS ≈ ES2016 + annotations de type optionnelles (+ compat
JSX)
TS2 transpile vers ES5 par défaut, mais peut viser ES2015.
Inclus par défaut dans VS2013u2 et ultérieurs + VSCode.
Peu d’inférence de type ; se repose surtout sur les
annotations.
Comme souvent avec IntelliSense, on a des définitions pré-
compilées externes pour éviter de devoir faire de l’inférence
profonde. Vaste référentiel sur .DefinitelyTyped
Intégrer TypeScript
La documentation liste  :
Browserify, Webpack, Grunt, Gulp, JSPM/Rollup, etc.
pas mal d’intégration classiques
En somme, ça se fait bien.
Un mot sur Flow
TS n’est pas le seul moyen d’avoir des infos de typage fines
sur du code JS. Le projet , de Facebook, est excellent.Flow
J’ai souvent entendu que les retours de Flow étaient plus
utiles / efficaces que ceux de TS, mais je n’ai pas comparé
personnellement.
Notez que Babel est capable de , et
que des outils avancés comme Tern.js savent exploiter les
annotations Flow pour leur assistance au code.
lire du code annoté Flow
Merci !
Et que JS soit avec vous.
Christophe Porteneuve
@porteneuve
Les slides sont sur bit.ly/msexp16-js

Contenu connexe

Tendances

Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
ASP.NET MVC 6
ASP.NET MVC 6ASP.NET MVC 6
ASP.NET MVC 6Microsoft
 
Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ ekino
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
 
.NET Core - Mug In Clermont
.NET Core - Mug In Clermont.NET Core - Mug In Clermont
.NET Core - Mug In ClermontThomas BAILLY
 
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...Publicis Sapient Engineering
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs13p
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3Nicolas Lœuillet
 
XebiCon'17 : Comment recréer AWS dans votre Data Center - Pablo Lopez et Aur...
XebiCon'17 : Comment recréer AWS dans votre Data Center - Pablo Lopez et Aur...XebiCon'17 : Comment recréer AWS dans votre Data Center - Pablo Lopez et Aur...
XebiCon'17 : Comment recréer AWS dans votre Data Center - Pablo Lopez et Aur...Publicis Sapient Engineering
 
eZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductioneZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductionRoland Benedetti
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Quentin Frémeaux
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelCocoaHeads France
 
Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)Quentin Frémeaux
 
BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! Erwann Robin
 
JavaScript dans l'usine logicielle
JavaScript dans l'usine logicielleJavaScript dans l'usine logicielle
JavaScript dans l'usine logiciellejollivetc
 

Tendances (20)

Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
ASP.NET MVC 6
ASP.NET MVC 6ASP.NET MVC 6
ASP.NET MVC 6
 
Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 
.NET Core - Mug In Clermont
.NET Core - Mug In Clermont.NET Core - Mug In Clermont
.NET Core - Mug In Clermont
 
Meetup aix-js-28-08-2017
Meetup aix-js-28-08-2017Meetup aix-js-28-08-2017
Meetup aix-js-28-08-2017
 
Node.js
Node.jsNode.js
Node.js
 
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
 
Intro aurelia js-typescript
Intro aurelia js-typescriptIntro aurelia js-typescript
Intro aurelia js-typescript
 
XebiCon'17 : Comment recréer AWS dans votre Data Center - Pablo Lopez et Aur...
XebiCon'17 : Comment recréer AWS dans votre Data Center - Pablo Lopez et Aur...XebiCon'17 : Comment recréer AWS dans votre Data Center - Pablo Lopez et Aur...
XebiCon'17 : Comment recréer AWS dans votre Data Center - Pablo Lopez et Aur...
 
eZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductioneZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introduction
 
Initiation à ASP.NET 4.0
Initiation à ASP.NET 4.0Initiation à ASP.NET 4.0
Initiation à ASP.NET 4.0
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter Meuel
 
Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)
 
BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native !
 
JavaScript dans l'usine logicielle
JavaScript dans l'usine logicielleJavaScript dans l'usine logicielle
JavaScript dans l'usine logicielle
 

Similaire à Le développement web : tour d'horizon

Développez dans le futur, dès maintenant !
Développez dans le futur, dès maintenant !Développez dans le futur, dès maintenant !
Développez dans le futur, dès maintenant !matparisot
 
Développez dans le futur, dès maintenant !
Développez dans le futur, dès maintenant !Développez dans le futur, dès maintenant !
Développez dans le futur, dès maintenant !Mathieu Parisot
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Yves-Emmanuel Jutard
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Société ELOSI
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React NativeCocoaHeads France
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Nicolas Silberman
 
Tp soa avec talend esb
Tp soa avec talend esbTp soa avec talend esb
Tp soa avec talend esbAlahyane Ahmed
 
Création de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESBCréation de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESBLilia Sfaxi
 
Responsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tousResponsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tousjwajsberg
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1Gilles Guirand
 
Nantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantNantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantJean-Michel Doudoux
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPrestaShop
 
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !vincent aniort
 
Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)guicara
 

Similaire à Le développement web : tour d'horizon (20)

Développez dans le futur, dès maintenant !
Développez dans le futur, dès maintenant !Développez dans le futur, dès maintenant !
Développez dans le futur, dès maintenant !
 
Développez dans le futur, dès maintenant !
Développez dans le futur, dès maintenant !Développez dans le futur, dès maintenant !
Développez dans le futur, dès maintenant !
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
 
Vbnet
VbnetVbnet
Vbnet
 
vbnet.pdf
vbnet.pdfvbnet.pdf
vbnet.pdf
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React Native
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
 
Cours1
Cours1Cours1
Cours1
 
Tp soa avec talend esb
Tp soa avec talend esbTp soa avec talend esb
Tp soa avec talend esb
 
JAVA 8
JAVA 8JAVA 8
JAVA 8
 
Création de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESBCréation de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESB
 
Responsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tousResponsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tous
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
 
Nantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantNantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenant
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
 
Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)
 

Plus de Microsoft

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuMicrosoft
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaSMicrosoft
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileMicrosoft
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Microsoft
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Microsoft
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Microsoft
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à ZMicrosoft
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Microsoft
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Microsoft
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsMicrosoft
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Microsoft
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryMicrosoft
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Microsoft
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Microsoft
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Microsoft
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Microsoft
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Microsoft
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursMicrosoft
 
Les nouveautés de C# 7
Les nouveautés de C# 7Les nouveautés de C# 7
Les nouveautés de C# 7Microsoft
 

Plus de Microsoft (20)

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieu
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaS
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobile
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à Z
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs Analytics
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site Recovery
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeurs
 
Les nouveautés de C# 7
Les nouveautés de C# 7Les nouveautés de C# 7
Les nouveautés de C# 7
 

Le développement web : tour d'horizon

  • 1. JavaScript : le futur, c’est maintenant !Un atelier de àChristophe Porteneuve MS experiences 2016
  • 2. whoami var christophe = { age: 38.91991786447639, family: { wife: 'Élodie', son: 'Maxence' }, city: 'Paris, FR', company: 'Delicious Insights', trainings: ['JS Total', 'Node.js', 'Git Total'], webSince: 1995, claimsToFame: [ 'Prototype.js', 'Ruby On Rails', 'Bien Développer pour le Web 2.0', 'Prototype and Script.aculo.us', 'Paris Web' ] }
  • 4. ES6 ou ES2015 ? Rappel : ES = ECMAScript = standard officiel de JavaScript. Avant 2015, on disait ES6, ES7… Par exemple, ES3 = 1999, ES5 = 2009, ES6 = 2015 Mais depuis 2015, on sort une version par an (en juin). On « met la pression » de tenue à jour en numérotant par année. Les noms officiels sont donc désormais ES2015, ES2016, etc.
  • 5. Et si on avait besoin de rien ? La prise en charge native est bien meilleure que ce qu’on croit. Edge 14 = 93% Firefox 52 = 94% Chrome 53 / Opera 40 = 97% Safari 10 (dont iOS 10) = 100% Node 6.5 = 97% Et « 90 % » ça suffit en général largement
  • 6. OK mais… dans la vraie vie… Pas encore de solution propre aux modules ES2015 natifs. Vous savez ce truc qui déboîte : import React, { PropTypes } from 'react' export default function Gauge ({ value, max = 100 }) { return <LinearProgress mode='determinate' value={value} max={max} /> } IE (même 11), Firefox < 45, Chrome < 49, Opera < 36, Safari < 10, iOS < 10, Node < 6, Android Browser…
  • 7. Et ES2016+, alors ? En plus on n’a parlé que de ES2015 là, mais on a ES2016, non ? Et l’an prochain, avec ES2017 on fait quoi ? Et l’année d’après ?
  • 8. ça roxxe des poneys
  • 9. Principe Transpileur : source ➡ autre source En l’occurence, « autre source » peut descendre jusqu’à ES5 L’idée : utiliser les dernières specs aujourd’hui (du moment qu’elles sont transpilables). La performance n’est, en pratique, pas un problème. (En pratique, presque tout ES2015 est transpilable, sauf les proxies)
  • 10. Babel et l’écosystème JS Babel est téléchargé (npm) plus de 57K/jour Environ 2 000 modules en dépendent Quand Babel a un souci, l’écosystème JS a chaud… (on y reviendra)Intégré avec l’univers A permis l’essor (enfin !) d’ES2015+ dans des projets de premier plan (React, Ember 2, Aurelia, JSPM…) et leurs utilisateurs (Facebook, Airbnb, Instagram, etc.)
  • 11. Pérennité de Babel Né en 2014, le bébé de Sebastian McKenzie . Désormais 250+ contributeurs. Comme Facebook l’a jugé critique à la mission, ils ont fait comme d’hab’ : on embauche le créateur et les plus gros contributeurs, juste pour continuer. Élément critique d’infrastructure pour beaucoup de grosses boîtes, et 100% FLOSS, donc on est tranquilles. On aura toujours besoin de Babel pour jouer tôt avec les fonctionnalités futures (ce qui est essentiel au processus du TC39).
  • 12. Inutile de tout transpiler ! Depuis Babel 6, on choisit les syntaxes qu’on veut transpiler. Tout le reste est laissé tel quel (considéré natif). Plus la prise en charge native augmente, moins on a besoin de transpiler de portions de code. On a tout intérêt à éviter l’approche « bulldozer » hors des PoC / démos / tutos. On gagne en perfs au build (transpilation) et à l’exécution (code natif plutôt que polyfillé). Notez toutefois que le code transpilé par Babel a des performances remarquables.
  • 13. Plugins Syntaxes et transforms Un plugin de syntaxe permet au parser de reconnaître une syntaxe au sein du flux JS. Mais Babel ne la transpile pas pour autant. Un plugin de transform(ation) applique le transpiling correspondant pour aboutir à de l’ES5. Ils exploitent automatiquement les éventuels plugins de syntaxe dont ils ont besoin. Mais  : Babel propose actuellement plus de 60 transforms, dont 21 rien que pour ES2015 ! ça fait du monde
  • 14. Presets On a donc la notion de preset : des groupes thématiques de plugins pour un but précis. On en compte… 5 officiels (es2015, es2016, es2017, latest et react), 4 expérimentaux dédiés aux stades TC-39 (stage-0 à stage-3), et plus de 750 communautaires ! Par exemple, latest transpile l’univers (tout ES2015+), mais les contribs ont latest-minimal, idéal en Node, qui feature-detect point par point On peut bien sûr mélanger presets et plugins spécifiques.
  • 15. Bien plus qu’ES2016 On l’a vu, Babel gère déjà ES2016, ES2017, et les stades qui alimenteront les versions ultérieures. Par exemple : object spread/rest et static, qui sont au stade 2 le binding operator qui est au stade 0 Mais on a aussi des plugins (officiels !) de syntaxes tierces (notamment JSX et les annotations Flow), de conversion de modules (ex. ES2015 ➡ CommonJS), de minification / optimisation (notamment pour React).
  • 16. Comment je lui dis ? Soit via un fichier .babelrc (marche partout) Soit via une clé "babel" dans le package.json (si tu transpiles au sein d’un script npm). { "presets": ["latest-minimal"], "plugins": [ "transform-object-rest-spread", "transform-class-properties", "transform-function-bind" ] } Du coup il faut avoir les modules : npm install --save-dev babel-preset-latest-minimal babel-transform-object-rest-spread babel-transform-class-properties babel-transform-function-bind
  • 18. Côté browser (si IE9+) En gros, il te faut tout. IE9 a 100% d’ES5 (hors le mode strict), mais 0% d’ES2015. IE10 en a 3%, IE11… 11%. Donc bon. "presets": ["es2015"] // ou "latest" si tu veux E2015+
  • 19. Côté browsers (evergreens) Tu prends les 2 dernières versions (façon Autoprefixer), tu examines tes besoins et la , et tu listes ce qui manque… Exemple : table de compatibilité "plugins": [ "transform-es2015-parameters", "transform-es2015-destructuring", "transform-es2015-spread", "transform-async-to-generator", "transform-transform-runtime", "transform-regenerator" ] (Pour Safari, qui rame loin, j’ai limité à 10+)
  • 20. Node 4.x LTS On a des , maintenus par la communauté. Exemple : presets dédiés "presets": ["es2015-node4", "es2016-node4"], // ou ["latest-minimal"] "plugins": ["transform-regenerator"] Mais c’est bon avec Node 4, là… Dans quelques jours la nouvelle LTS c’est Node 6 !
  • 21. Node 6.x LTS Excellente prise en charge native de ES2015+, le preset communautaire est donc nettement plus léger. "presets": ["latest-node6"] // ou ["latest-minimal"]
  • 22. Electron Electron 1.4.1 est basé sur Chromium 53, Node 6.5 et v8 5.3, autant dire que vous avez un gros, gros paquet d’ES pris en charge en natif (quasiment tout ES2016 et diverses parties d’ES2017). Vu que le v8 est partagé, la meilleure approche est sans doute : "presets": ["latest-minimal"]
  • 23. Comment j’intègre Babel dans mon EDI ?
  • 24. Visual Studio Code ext install vscode-babel-coloring ext install theme-monokaiextended # meilleure différenciation visuelle
  • 25. Visual Studio dans la dernière version.ES2015 est pas mal intégré (mais vous n’aurez pas d’image parce que VS 2015 Community est trop gros pour mes VM Windows)
  • 26. JetBrains (IntelliJ, WebStorm, PHPStorm, etc.) Les versions 2016 récentes (ex. +) intègrent ES2015 en natif, ainsi que Babel comme watcher. WebStorm 2016.2
  • 27. Eclipse #compassion Désespérément à la rue (et lent, et lourd…) mais de valeureux membres de la communauté maintiennent , basé sur l’excellent . Tern IDE Tern.js
  • 28. Comment j’intègre Babel dans mon éditeur ?
  • 29. Sublime Text 3 Installer puis le paquet (pas le paquet ES.Next). Idéalement, faire de « JavaScript (Babel) » la syntaxe par défaut pour les fichiers .js. PackageControl Babel
  • 30. Atom Bonne prise en charge en natif ; nombreuses extensions possibles avec les paquets et .language-babel atom-ternjs
  • 31. Brackets Gestion correcte en natif, on aura besoin de l’extension JSX si on utilise cette syntaxe complémentaire.
  • 32. Notepad++ Non, je plaisante. Sidéré qu’autant de que des gens s’en servent encore…
  • 33. Vim Évidemment, on peut tout faire. Les trois plugins les plus utilisés sont , et . vim-javascript vim-jsx es.next.syntax.vim
  • 34. Emacs Évidemment… on peut tout faire. Manifestement, le plugin populaire est .js2-mode
  • 35. Comment j’intègre Babel dans mon éditeur/EDI en ligne ?
  • 36. JSBin Il suffit de choisir le mode ES6 / Babel (ou JSX) dans la liste de syntaxes pour le panneau JavaScript. Attention, il utilise JSHint par défaut plutôt qu’ESLint, ce qui rend moins pratique la prise en charge d’ES2015.
  • 37. CodePen Il suffit de choisir Babel comme préprocesseur dans les réglages du panneau JavaScript.
  • 38. JSFiddle Il suffit de choisir Babel comme langage dans les réglages du panneau JavaScript.
  • 39. Cloud9 ES2015+ et Babel pris en charge nativement.
  • 40. Comment j’intègre Babel dans ma chaîne de build ?
  • 41. Browserify C’est le transform qui fait l’interface. CLI :babelify $ $ npm install --save-dev babelify babel-core babel-preset-latest babel-preset-react browserify index.js -o bundle.js -t babelify --presets latest react Ou dans votre script de bundling : var fs = require('fs') var browserify = require('browserify') browserify('./index.js') .transform('babelify', { presets: ['latest', 'react'] }) .bundle() .pipe(fs.createWriteStream('bundle.js'))
  • 42. Webpack On utilise le . La config ressemble à ceci :babel-loader // … module: { // … loaders: [ // … { test: /.(?:jsx?|es6)$/, exclude: /(?:node_modules|bower_components)/, loader: 'babel', query: { presets: ['latest', 'react'] } } // … ] // … }
  • 43. Rollup Le plus simple, c’est le plugin babel $ npm install --save-dev rollup-plugin-babel babel-preset-es2015-rollup Dans la config Rollup : import json from 'rollup-plugin-json' import babel from 'rollup-plugin-babel' export default { entry: './index.js', format: 'cjs', plugins: [ json() , babel() ], dest: 'bundle.js' }; L’activation du preset se fait par un fichier .babelrc.
  • 44. Gulp Naturellement, on a . Pour la version avec les sourcemaps, ça donne un truc dans ce style : gulp-babel var gulp = require('gulp') var sourcemaps = require('gulp-sourcemaps') var babel = require('gulp-babel') var concat = require('gulp-concat') gulp.task('default', function () { return gulp.src('src/**/*.js') .pipe(sourcemaps.init()) .pipe(babel()) .pipe(concat('bundle.js')) .pipe(sourcemaps.write('.')) .pipe(gulp.dest('dist')) }) Là aussi, configuration externe par .babelrc.
  • 45. Grunt Pas de surprise : il y a . Exemple :grunt-babel require('load-grunt-tasks')(grunt) grunt.initConfig({ babel: { options: { sourceMap: true }, dist: { files: { 'dist/bundle.js': 'src/**/*.js' } } } }) grunt.registerTask('default', [ 'babel' ]) Et re-configuration par .babelrc.
  • 46. T’as pas parlé du mien ! Moi non, mais je suis sûr que .Babel oui D’autant que la majorité de ces intégrations sont officielles, maintenues au sein du projet Babel.
  • 48. TypeScript vs. ES2015+ TS ≈ ES2016 + annotations de type optionnelles (+ compat JSX) TS2 transpile vers ES5 par défaut, mais peut viser ES2015. Inclus par défaut dans VS2013u2 et ultérieurs + VSCode. Peu d’inférence de type ; se repose surtout sur les annotations. Comme souvent avec IntelliSense, on a des définitions pré- compilées externes pour éviter de devoir faire de l’inférence profonde. Vaste référentiel sur .DefinitelyTyped
  • 49. Intégrer TypeScript La documentation liste  : Browserify, Webpack, Grunt, Gulp, JSPM/Rollup, etc. pas mal d’intégration classiques En somme, ça se fait bien.
  • 50. Un mot sur Flow TS n’est pas le seul moyen d’avoir des infos de typage fines sur du code JS. Le projet , de Facebook, est excellent.Flow J’ai souvent entendu que les retours de Flow étaient plus utiles / efficaces que ceux de TS, mais je n’ai pas comparé personnellement. Notez que Babel est capable de , et que des outils avancés comme Tern.js savent exploiter les annotations Flow pour leur assistance au code. lire du code annoté Flow
  • 51. Merci ! Et que JS soit avec vous. Christophe Porteneuve @porteneuve Les slides sont sur bit.ly/msexp16-js