SlideShare a Scribd company logo
1 of 35
AMBIENT INTELLIGENCE
tech days•
2015
#mstechdays techdays.microsoft.fr
Grunt / Bower / Yeoman ou comment
automatiser le développement d'un
projet web SPA
Maxime LUCE
CEO @ Touchify
maxime@touchify.co
@TouchifyApp
tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Gestion des dépendances
 Compilation / Minification / Tests / Linting
 Développement
Tâches récurrentes d’un projet web
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Node.JS
 Scripts simples mais puissant
 Projet web donc javascript !
Outils d’automatisation
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Bower ?
 Grunt ?
 Yeoman ?
Outils d’automatisation
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Gestionnaire de librairies JS / CSS
 Utilisé pour installer et mettre à jour les librairies
 Assure l’intégrité des versions
Définition
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Registre de librairies JS / CSS
 Enregistre les versions dans un fichier bower.json
 Arbre de dépendances plat
Comment ça marche ?
Comment automatiser le développement d'un projet web SPA
Bower
# install bower
$ npm install –g bower
# install a package
$ bower install jquery --save
#install from github
$ bower install user/repo --save-dev
# install from url
$ bower install http://path.to/script.js
tech.days 2015#mstechdays
Bower
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Gestionnaire de tâches Node.JS
 Automatise les tâches récurrentes
 Enormément de tâches dans NPM
Définition
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Configuration dans un fichier Gruntfile.js
 Tâches dans NPM ou en local
 Simple !!
Comment ça marche ?
Comment automatiser le développement d'un projet web SPA
Grunt CLI
# install grunt globally
$ npm install –g grunt-cli
# install grunt locally
$ npm install grunt --save-dev
# install a task
$ npm install grunt-contrib-concat --save-dev
# run a task
$ grunt concat:dist
Gruntfile.js
module.exports = function (grunt) {
grunt.initConfig({
// task config
concat: {
dist: {
src: "app/*.js",
dest: "dist/app.js"
}
}
});
// load task
grunt.loadNpmTasks("grunt-contrib-concat");
// alias task
grunt.registerTask("build", ["concat:dist"]);
};
tech.days 2015#mstechdays
Grunt
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Gestionnaire de template de projets
 Simplifie la création de projet et d’éléments
 Force l’utilisation de bonnes pratiques
Définition
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Générateurs dans NPM
 Utilise Bower pour gérer les dépendances
 Utilise Grunt pour gérer les tâches de compilation
Comment ça marche ?
Comment automatiser le développement d'un projet web SPA
Yeoman
# install yeoman
$ npm install –g yo
# install generator
$ npm install –g generator-backbone
# run generator
$ yo backbone
# run sub generator
$ yo backbone:model user
tech.days 2015#mstechdays
Yeoman
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
Create a simple Grunt Task
module.exports = function (grunt) {
grunt.registerTask("myCustomTask", function () {
// read package.json to get version
var pkg = grunt.file.readJSON("package.json");
// get the version.js content
var content = grunt.file.read("version.js");
// replace the tag {{version}} by the package’s version
content = content.replace("{{version}}", pkg.version);
// write the new content into version.js
grunt.file.write("version.js", content);
});
};
Create a multi Grunt Task
module.exports = function (grunt) {
grunt.registerMultiTask("myVersionTask", function () {
var pkg = grunt.file.readJSON("package.json");
// loop over configured files
this.files.forEach(function (file) {
// loop over src / dest match
file.src.forEach(function (src) {
var content = grunt.file.read(src);
content = content.replace("{{version}}", pkg.version);
grunt.file.write("version.js", file.dest);
});
});
});
};
Create a multi Grunt Task
module.exports = function (grunt) {
grunt.initConfig({
// task config
myVersionTask: {
dist: {
src: "app/**/*.js",
dest: "dist/"
}
}
});
// load task from local directory
grunt.loadTasks("tasks");
// alias task
grunt.registerTask("build", ["myVersionTask:dist"]);
};
tech.days 2015#mstechdays
Grunt avancé
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
Create a Template
• app/
• templates/
• …
• index.js
• model/
• templates/
• …
• index.js
Create a Template
var yeoman = require("yeoman-generator");
var CustomGenerator = yeoman.generators.Base.extend({
constructor: function () { },
prompting: function () { },
writing: {
git: function () { },
bower: function () { },
gruntfile: function () { },
index: function () { },
mainjs: function () { },
},
install: function () { },
});
module.exports = CustomGenerator;
Create a Template
// prompting
var prompts = [{
type: "text",
name: "title",
message: "Title of the application"
}];
this.prompt(prompts, function (answers) {
this.title = answers.title;
});
// writing
this.fs.copy(this.templatePath("gitattributes"), this.destinationPath(".gitattributes"));
this.fs.copyTpl(this.templatePath("_gruntfile.js"), this.destinationPath("Gruntfile.js"), { arg1: "value1" });
// installing
this.installDependencies({ skipInstall: this.options["skip-install"] });
tech.days 2015#mstechdays
Yeoman avancé
Comment automatiser le développement d'un projet web SPA
tech.days 2015#mstechdays
 Slides :
http://fr.slideshare.net/Touchify/grunt-bower-yeoman-ou-comment-
automatiser-un-projet-web-spa
 Démo :
https://github.com/spatools/techdays2015
 Documentations :
http://bower.io http://gruntjs.com http://yeoman.io
Liens
Comment automatiser le développement d'un projet web SPA
© 2015 Microsoft Corporation. All rights reserved.
tech days•
2015
#mstechdays techdays.microsoft.fr

More Related Content

What's hot

Angular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGAngular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGWilliam Marques
 
Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de JhipsterKokou Gaglo
 
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureDéployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureMicrosoft
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorArthurMaroulier
 
Angular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindAngular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindPhilippe Didiergeorges
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+ekino
 
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)Kokou Gaglo
 
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
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.jsTelecomValley
 
Jenkins - Les jeudis de la découverte
Jenkins - Les jeudis de la découverteJenkins - Les jeudis de la découverte
Jenkins - Les jeudis de la découverteStephane Couzinier
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIHugo Hamon
 
DevOps - from idea to production
DevOps - from idea to productionDevOps - from idea to production
DevOps - from idea to productionHabib MAALEM
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?Membré Guillaume
 
Développement : mettez le turbo ! - Liferay France Symposium 2017
Développement : mettez le turbo ! - Liferay France Symposium 2017Développement : mettez le turbo ! - Liferay France Symposium 2017
Développement : mettez le turbo ! - Liferay France Symposium 2017Sébastien Le Marchand
 

What's hot (19)

Angular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGAngular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUG
 
Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de Jhipster
 
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureDéployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
 
Node.js
Node.jsNode.js
Node.js
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme Meteor
 
Java - Lombok
Java - LombokJava - Lombok
Java - Lombok
 
Angular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindAngular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium Versusmind
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
 
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
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Code, ship and run
Code, ship and runCode, ship and run
Code, ship and run
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
Jenkins - Les jeudis de la découverte
Jenkins - Les jeudis de la découverteJenkins - Les jeudis de la découverte
Jenkins - Les jeudis de la découverte
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
 
DevOps - from idea to production
DevOps - from idea to productionDevOps - from idea to production
DevOps - from idea to production
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Développement : mettez le turbo ! - Liferay France Symposium 2017
Développement : mettez le turbo ! - Liferay France Symposium 2017Développement : mettez le turbo ! - Liferay France Symposium 2017
Développement : mettez le turbo ! - Liferay France Symposium 2017
 
JENKINS_BreizhJUG_20111003
JENKINS_BreizhJUG_20111003JENKINS_BreizhJUG_20111003
JENKINS_BreizhJUG_20111003
 

Viewers also liked

APRESENTAÇÃO DA C3 INTERNACIONAL
APRESENTAÇÃO DA C3 INTERNACIONALAPRESENTAÇÃO DA C3 INTERNACIONAL
APRESENTAÇÃO DA C3 INTERNACIONALDouglas Santos
 
PPDM - Gagnez de l'argent sur Internet n°4
PPDM - Gagnez de l'argent sur Internet n°4PPDM - Gagnez de l'argent sur Internet n°4
PPDM - Gagnez de l'argent sur Internet n°4Mat De Faya
 
Open Access : Enjeux et Actualités - Bianchini
Open Access : Enjeux et Actualités - BianchiniOpen Access : Enjeux et Actualités - Bianchini
Open Access : Enjeux et Actualités - BianchiniMyScienceWork
 
Projet Saint Jean de Luz 2014 2020
Projet Saint Jean de Luz 2014 2020Projet Saint Jean de Luz 2014 2020
Projet Saint Jean de Luz 2014 2020EmileAmaro
 
Table ronde : mise en tourisme du terroir : l'alliance des savoir-faire
Table ronde : mise en tourisme du terroir : l'alliance des savoir-faire Table ronde : mise en tourisme du terroir : l'alliance des savoir-faire
Table ronde : mise en tourisme du terroir : l'alliance des savoir-faire paysdaix
 
Présentation - Nvx médias
Présentation - Nvx médiasPrésentation - Nvx médias
Présentation - Nvx médiasbloubloublou
 
Présentation mh link e doc
Présentation mh link e docPrésentation mh link e doc
Présentation mh link e docClaudePoux
 
Resume FR Alex Mestre avril 2013
Resume FR Alex Mestre avril 2013Resume FR Alex Mestre avril 2013
Resume FR Alex Mestre avril 2013Alex MESTRE GIMENEZ
 
Seul le combat libère. Thomas Sankara - 17 novembre 1986
Seul le combat libère. Thomas Sankara - 17 novembre 1986Seul le combat libère. Thomas Sankara - 17 novembre 1986
Seul le combat libère. Thomas Sankara - 17 novembre 1986Girolamo Savonarola
 
Candidature secretaire
Candidature secretaireCandidature secretaire
Candidature secretaireserre24
 
Community Management - Social Media - Collaborative starter
Community Management - Social Media - Collaborative starterCommunity Management - Social Media - Collaborative starter
Community Management - Social Media - Collaborative starterAstrolab Consulting
 
Rôle des français de l'étranger pour faire rayonner la 'Marque France', les M...
Rôle des français de l'étranger pour faire rayonner la 'Marque France', les M...Rôle des français de l'étranger pour faire rayonner la 'Marque France', les M...
Rôle des français de l'étranger pour faire rayonner la 'Marque France', les M...Elian CARSENAT
 
Presentation webmarketing dediee
Presentation webmarketing dedieePresentation webmarketing dediee
Presentation webmarketing dedieeregionalpartner56
 
Highlights Biennale des Antiquaires 2012
Highlights Biennale des Antiquaires 2012Highlights Biennale des Antiquaires 2012
Highlights Biennale des Antiquaires 2012Tolila Sylvie
 
Pour un réseau international d'écoles et d'enseignants partenaires
Pour un réseau international d'écoles et d'enseignants partenairesPour un réseau international d'écoles et d'enseignants partenaires
Pour un réseau international d'écoles et d'enseignants partenairesAlexandre Lepage
 

Viewers also liked (20)

APRESENTAÇÃO DA C3 INTERNACIONAL
APRESENTAÇÃO DA C3 INTERNACIONALAPRESENTAÇÃO DA C3 INTERNACIONAL
APRESENTAÇÃO DA C3 INTERNACIONAL
 
PPDM - Gagnez de l'argent sur Internet n°4
PPDM - Gagnez de l'argent sur Internet n°4PPDM - Gagnez de l'argent sur Internet n°4
PPDM - Gagnez de l'argent sur Internet n°4
 
Open Access : Enjeux et Actualités - Bianchini
Open Access : Enjeux et Actualités - BianchiniOpen Access : Enjeux et Actualités - Bianchini
Open Access : Enjeux et Actualités - Bianchini
 
Projet Saint Jean de Luz 2014 2020
Projet Saint Jean de Luz 2014 2020Projet Saint Jean de Luz 2014 2020
Projet Saint Jean de Luz 2014 2020
 
Table ronde : mise en tourisme du terroir : l'alliance des savoir-faire
Table ronde : mise en tourisme du terroir : l'alliance des savoir-faire Table ronde : mise en tourisme du terroir : l'alliance des savoir-faire
Table ronde : mise en tourisme du terroir : l'alliance des savoir-faire
 
Comment optimiser sa présence sur le web ?
Comment optimiser sa présence sur le web ?Comment optimiser sa présence sur le web ?
Comment optimiser sa présence sur le web ?
 
Présentation - Nvx médias
Présentation - Nvx médiasPrésentation - Nvx médias
Présentation - Nvx médias
 
Présentation mh link e doc
Présentation mh link e docPrésentation mh link e doc
Présentation mh link e doc
 
Resume FR Alex Mestre avril 2013
Resume FR Alex Mestre avril 2013Resume FR Alex Mestre avril 2013
Resume FR Alex Mestre avril 2013
 
Seul le combat libère. Thomas Sankara - 17 novembre 1986
Seul le combat libère. Thomas Sankara - 17 novembre 1986Seul le combat libère. Thomas Sankara - 17 novembre 1986
Seul le combat libère. Thomas Sankara - 17 novembre 1986
 
Programme de 4 jours
Programme de 4 joursProgramme de 4 jours
Programme de 4 jours
 
Voyages et stratégie
Voyages et stratégieVoyages et stratégie
Voyages et stratégie
 
Candidature secretaire
Candidature secretaireCandidature secretaire
Candidature secretaire
 
Les faux prophetes
Les faux prophetesLes faux prophetes
Les faux prophetes
 
Community Management - Social Media - Collaborative starter
Community Management - Social Media - Collaborative starterCommunity Management - Social Media - Collaborative starter
Community Management - Social Media - Collaborative starter
 
Atelier Google+local Vallée Dordogne Forêt Bessède
Atelier Google+local Vallée Dordogne Forêt BessèdeAtelier Google+local Vallée Dordogne Forêt Bessède
Atelier Google+local Vallée Dordogne Forêt Bessède
 
Rôle des français de l'étranger pour faire rayonner la 'Marque France', les M...
Rôle des français de l'étranger pour faire rayonner la 'Marque France', les M...Rôle des français de l'étranger pour faire rayonner la 'Marque France', les M...
Rôle des français de l'étranger pour faire rayonner la 'Marque France', les M...
 
Presentation webmarketing dediee
Presentation webmarketing dedieePresentation webmarketing dediee
Presentation webmarketing dediee
 
Highlights Biennale des Antiquaires 2012
Highlights Biennale des Antiquaires 2012Highlights Biennale des Antiquaires 2012
Highlights Biennale des Antiquaires 2012
 
Pour un réseau international d'écoles et d'enseignants partenaires
Pour un réseau international d'écoles et d'enseignants partenairesPour un réseau international d'écoles et d'enseignants partenaires
Pour un réseau international d'écoles et d'enseignants partenaires
 

Similar to Grunt, Bower, Yeoman ou comment automatiser un projet web SPA

Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Corinne Schillinger
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sArnaud MAZIN
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache MavenArnaud Héritier
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueVincent Composieux
 
Cycle de vie d'un projet web agile avec TFS 2013, Azure VM et Monaco
Cycle de vie d'un projet web agile avec TFS 2013, Azure VM et MonacoCycle de vie d'un projet web agile avec TFS 2013, Azure VM et Monaco
Cycle de vie d'un projet web agile avec TFS 2013, Azure VM et MonacoMicrosoft
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders BattleArnaud Héritier
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: AngularHabib Ayad
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
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
 
Les méthodes agiles dans TFS
Les méthodes agiles dans TFSLes méthodes agiles dans TFS
Les méthodes agiles dans TFSDenis Voituron
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange LabsEmmanuel Hugonnet
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipelineNicolas wallerand
 
Tests automatisés java script
Tests automatisés java scriptTests automatisés java script
Tests automatisés java scriptPascal Laurin
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Martin Latrille
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...PimpMySharePoint
 

Similar to Grunt, Bower, Yeoman ou comment automatiser un projet web SPA (20)

Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 
Cycle de vie d'un projet web agile avec TFS 2013, Azure VM et Monaco
Cycle de vie d'un projet web agile avec TFS 2013, Azure VM et MonacoCycle de vie d'un projet web agile avec TFS 2013, Azure VM et Monaco
Cycle de vie d'un projet web agile avec TFS 2013, Azure VM et Monaco
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
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 !
 
Les méthodes agiles dans TFS
Les méthodes agiles dans TFSLes méthodes agiles dans TFS
Les méthodes agiles dans TFS
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
12-Factor
12-Factor12-Factor
12-Factor
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
Tests automatisés java script
Tests automatisés java scriptTests automatisés java script
Tests automatisés java script
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
 

Grunt, Bower, Yeoman ou comment automatiser un projet web SPA

  • 2. Grunt / Bower / Yeoman ou comment automatiser le développement d'un projet web SPA Maxime LUCE CEO @ Touchify maxime@touchify.co @TouchifyApp
  • 3. tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
  • 4. tech.days 2015#mstechdays  Gestion des dépendances  Compilation / Minification / Tests / Linting  Développement Tâches récurrentes d’un projet web Comment automatiser le développement d'un projet web SPA
  • 5. tech.days 2015#mstechdays  Node.JS  Scripts simples mais puissant  Projet web donc javascript ! Outils d’automatisation Comment automatiser le développement d'un projet web SPA
  • 6. tech.days 2015#mstechdays  Bower ?  Grunt ?  Yeoman ? Outils d’automatisation Comment automatiser le développement d'un projet web SPA
  • 7. tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
  • 8. tech.days 2015#mstechdays  Gestionnaire de librairies JS / CSS  Utilisé pour installer et mettre à jour les librairies  Assure l’intégrité des versions Définition Comment automatiser le développement d'un projet web SPA
  • 9. tech.days 2015#mstechdays  Registre de librairies JS / CSS  Enregistre les versions dans un fichier bower.json  Arbre de dépendances plat Comment ça marche ? Comment automatiser le développement d'un projet web SPA
  • 10. Bower # install bower $ npm install –g bower # install a package $ bower install jquery --save #install from github $ bower install user/repo --save-dev # install from url $ bower install http://path.to/script.js
  • 11. tech.days 2015#mstechdays Bower Comment automatiser le développement d'un projet web SPA
  • 12. tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
  • 13. tech.days 2015#mstechdays  Gestionnaire de tâches Node.JS  Automatise les tâches récurrentes  Enormément de tâches dans NPM Définition Comment automatiser le développement d'un projet web SPA
  • 14. tech.days 2015#mstechdays  Configuration dans un fichier Gruntfile.js  Tâches dans NPM ou en local  Simple !! Comment ça marche ? Comment automatiser le développement d'un projet web SPA
  • 15. Grunt CLI # install grunt globally $ npm install –g grunt-cli # install grunt locally $ npm install grunt --save-dev # install a task $ npm install grunt-contrib-concat --save-dev # run a task $ grunt concat:dist
  • 16. Gruntfile.js module.exports = function (grunt) { grunt.initConfig({ // task config concat: { dist: { src: "app/*.js", dest: "dist/app.js" } } }); // load task grunt.loadNpmTasks("grunt-contrib-concat"); // alias task grunt.registerTask("build", ["concat:dist"]); };
  • 17. tech.days 2015#mstechdays Grunt Comment automatiser le développement d'un projet web SPA
  • 18. tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
  • 19. tech.days 2015#mstechdays  Gestionnaire de template de projets  Simplifie la création de projet et d’éléments  Force l’utilisation de bonnes pratiques Définition Comment automatiser le développement d'un projet web SPA
  • 20. tech.days 2015#mstechdays  Générateurs dans NPM  Utilise Bower pour gérer les dépendances  Utilise Grunt pour gérer les tâches de compilation Comment ça marche ? Comment automatiser le développement d'un projet web SPA
  • 21. Yeoman # install yeoman $ npm install –g yo # install generator $ npm install –g generator-backbone # run generator $ yo backbone # run sub generator $ yo backbone:model user
  • 22. tech.days 2015#mstechdays Yeoman Comment automatiser le développement d'un projet web SPA
  • 23. tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
  • 24. Create a simple Grunt Task module.exports = function (grunt) { grunt.registerTask("myCustomTask", function () { // read package.json to get version var pkg = grunt.file.readJSON("package.json"); // get the version.js content var content = grunt.file.read("version.js"); // replace the tag {{version}} by the package’s version content = content.replace("{{version}}", pkg.version); // write the new content into version.js grunt.file.write("version.js", content); }); };
  • 25. Create a multi Grunt Task module.exports = function (grunt) { grunt.registerMultiTask("myVersionTask", function () { var pkg = grunt.file.readJSON("package.json"); // loop over configured files this.files.forEach(function (file) { // loop over src / dest match file.src.forEach(function (src) { var content = grunt.file.read(src); content = content.replace("{{version}}", pkg.version); grunt.file.write("version.js", file.dest); }); }); }); };
  • 26. Create a multi Grunt Task module.exports = function (grunt) { grunt.initConfig({ // task config myVersionTask: { dist: { src: "app/**/*.js", dest: "dist/" } } }); // load task from local directory grunt.loadTasks("tasks"); // alias task grunt.registerTask("build", ["myVersionTask:dist"]); };
  • 27. tech.days 2015#mstechdays Grunt avancé Comment automatiser le développement d'un projet web SPA
  • 28. tech.days 2015#mstechdaysComment automatiser le développement d'un projet web SPA
  • 29. Create a Template • app/ • templates/ • … • index.js • model/ • templates/ • … • index.js
  • 30. Create a Template var yeoman = require("yeoman-generator"); var CustomGenerator = yeoman.generators.Base.extend({ constructor: function () { }, prompting: function () { }, writing: { git: function () { }, bower: function () { }, gruntfile: function () { }, index: function () { }, mainjs: function () { }, }, install: function () { }, }); module.exports = CustomGenerator;
  • 31. Create a Template // prompting var prompts = [{ type: "text", name: "title", message: "Title of the application" }]; this.prompt(prompts, function (answers) { this.title = answers.title; }); // writing this.fs.copy(this.templatePath("gitattributes"), this.destinationPath(".gitattributes")); this.fs.copyTpl(this.templatePath("_gruntfile.js"), this.destinationPath("Gruntfile.js"), { arg1: "value1" }); // installing this.installDependencies({ skipInstall: this.options["skip-install"] });
  • 32. tech.days 2015#mstechdays Yeoman avancé Comment automatiser le développement d'un projet web SPA
  • 33.
  • 34. tech.days 2015#mstechdays  Slides : http://fr.slideshare.net/Touchify/grunt-bower-yeoman-ou-comment- automatiser-un-projet-web-spa  Démo : https://github.com/spatools/techdays2015  Documentations : http://bower.io http://gruntjs.com http://yeoman.io Liens Comment automatiser le développement d'un projet web SPA
  • 35. © 2015 Microsoft Corporation. All rights reserved. tech days• 2015 #mstechdays techdays.microsoft.fr

Editor's Notes

  1. Projets web moderne Beaucoup de librairies Beaucoup de Javascript Nécessité plus grande de travailler le javascript (compilation, concaténation, minification)
  2. Beaucoup de librairies = long et fastidieux de gérer les versions Beaucoup de javascript = énormément de tâches pour maintenir le javascript sain et léger Tâches répétitives dans le développement = énormément de tâches répétitives (modèles, viewmodels, views, configuraiton)
  3. Node.JS ? NPM ? On fait du web donc on fait du javascript Simple et puissant (beaucoup de package dans NPM)
  4. Gestionnaires de librairies au même titre que NuGet ou NPM Gère les versions et les dépendances
  5. Registre pour recherche et informations sur les packages Évite d’enregistrer les versions sur le repo Requiert une seule version pour chaque package pour assurer la rapidité de chargement des page et force la vérification de la compatibilité des versions
  6. Bower install Bower update
  7. Tâches récurrentes : Compilation (concaténation / minification) Tests (unitaires / lint) Spriting Versionning
  8. Grunt tasks Grunt watch
  9. Exemples de générateurs : Webapp Angular MEAN Backbone Ember Durandal Bien fait  Bonne pratiques Maintient des bonnes pratiques grâces aux sub generators
  10. Beaucoup de générateurs Basé sur bower et grunt donc réutilisation des compétences
  11. Run yo backbone in tmp 0.0.1 grunt serve Run yo backbone:models user view router 0.0.3 grunt serve Run model repository collection userrepo view repository 0.0.6 grunt serve 0.1.0 grunt serve (si -30min)
  12. 0.1.1 explain
  13. run yo generator in tmp 0.1.3 explain