SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
1
PLOPPLOP : UN: UN MICRO-GÉNÉRATEURMICRO-GÉNÉRATEUR POUR SEPOUR SE
SIMPLIFIER LA VIESIMPLIFIER LA VIE AU QUOTIDIENAU QUOTIDIEN
2
@NICOESPEON@NICOESPEON
http://nicoespeon.com
3 . 1
KEZAKOKEZAKO PLOPPLOP
> UN MICRO-GÉNÉRAQUOI ?> UN MICRO-GÉNÉRAQUOI ?
3 . 2
GÉNÈRE DEGÉNÈRE DE NOUVEAUX FICHIERSNOUVEAUX FICHIERS À PARTIR DEÀ PARTIR DE TEMPLATESTEMPLATES
Évite d'aller copier/coller un autre fichier « similaire » (lequel ?),
puis supprimer les lignes inutiles et déclarer tout ça où il faut
(sans se tromper ?)
On écrit plop, on répond à quelques questions et TADAAA !
3 . 3
GAIN DE TEMPSGAIN DE TEMPS && MOINS D'ERREURSMOINS D'ERREURS AU QUOTIDIENAU QUOTIDIEN
4 . 1
COMMENTCOMMENT ÇA MARCHE ?ÇA MARCHE ?
> INSTALLATION, CONFIGURATION…> INSTALLATION, CONFIGURATION…
4 . 2
INSTALLATIONINSTALLATION
$ npm install --save-dev plop
{
"name": "your-awesome-project",
"description": "An awesome project",
"devDependencies": {
"plop": "1.4.1"
},
"scripts": {
"generate": "plop"
}
}
$ npm run generate
$ npm install -g plop
$ plop
GlobalLocal
4 . 3
CONFIGURATIONCONFIGURATION
Plop a besoin d'un plopfile.js et de templates.
module.exports = function (plop) {};
4 . 4
LES TEMPLATESLES TEMPLATES
C'est du !Handlebars
/**
* TODO - Describe what your model does.
*
* @class {{pascalCase name}}.Model
* @module {{pascalCase name}}
* @constructor
*/
import {Model} from "backbone";
export default Model.extend( {
initialize() {
// Executed on model initialization
}
} );
On a accès :
aux variables du prompt
aux / définishelpers partials
plop.addHelper( name, helper );
plop.addPartial( name, template );
Dans plopfile.js :
4 . 5
CRÉER UN GÉNÉRATEURCRÉER UN GÉNÉRATEUR
module.exports = function ( plop ) {
plop.setGenerator( "module", {
description: "create a new module",
prompts: [],
actions: []
} );
};
plop.setGenerator( name, config );
Création Utilisation
4 . 6
GÉNÉRATEURGÉNÉRATEUR −− PROMPTSPROMPTS
module.exports = function ( plop ) {
plop.setGenerator( "module", {
description: "create a new module",
prompts: [
{
type: "input",
name: "name",
message: "What is your module name?",
validate: function (value) {
if ((/.+/).test(value)) { return true; }
return "name is required";
}
}
],
// …
} );
};
C'est du !Inquirer
4 . 7
GÉNÉRATEURGÉNÉRATEUR −− ACTIONSACTIONS
module.exports = function ( plop ) {
plop.setGenerator( "module", {
description: "create a new module",
// …
actions: [
{
type: "add",
path: "modules/{{camelCase name}}.js",
templateFile: "templates/module.js"
}
]
} );
};
2 types d'actions :
add
modify
Strings parsées avec Handlebars
4 . 8
GÉNÉRATEURGÉNÉRATEUR −− ACTIONSACTIONS
actions: function( data ) {
var actions = [];
if( data.wantTacos ) {
actions.push( {
type: "add",
path: "folder/{{dashCase name}}.txt",
templateFile: "templates/tacos.txt"
} );
} else {
actions.push( {
type: "add",
path: "folder/{{dashCase name}}.txt",
templateFile: "templates/burritos.txt"
} );
}
return actions;
}
actions peut aussi être une
fonction qui :
prend les réponses de
prompts en paramètre
retourne le tableau des
actions à effectuer
Permet d'adapter les actions en
fonction des réponses données
5 . 1
POURQUOIPOURQUOI PLOP ?PLOP ?
> ET POURQUOI PAS> ET POURQUOI PAS YEOMANYEOMAN HEIN ?HEIN ?
5 . 2
AVANTAGESAVANTAGES DE PLOP SUR YEOMANDE PLOP SUR YEOMAN
Léger, embarqué dans le projet = maintenance plus simple
Simple à prendre en main, plus facilement adopté car peu coûteux
5 . 3
DES USE CASESDES USE CASES DIFFÉRENTSDIFFÉRENTS
scaffold un nouveau projet
selon des standards
bootstrap de nouveaux
fichiers dans le cadre de
ce projet (standard)
PlopYeoman
bootstrap de nouveaux fichiers
selon les standards
personnalisés d'un projet
KISS = commencer avec plop, compliquer au besoin.
6
MERCI !MERCI ! DES QUESTIONS ?DES QUESTIONS ?
Plop : https://github.com/amwmedia/plop
Blog post : http://bit.ly/22hX160

Contenu connexe

Tendances

Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)Julien CROUZET
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 

Tendances (6)

Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Django compressor
Django compressorDjango compressor
Django compressor
 
Cours php
Cours phpCours php
Cours php
 

Similaire à Plop : un micro-générateur pour se simplifier la vie au quotidien

Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienNicolas Carlo
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web5pidou
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2dhugomallet
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureCocoaHeads France
 
Titanium studio et les modules
Titanium studio et les modulesTitanium studio et les modules
Titanium studio et les modulesGautier Pialat
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Ruau Mickael
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 
Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012slandelle
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Faycel Chaoua
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpMSDEVMTL
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Geeks Anonymes
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Plpython et Triggers
Plpython et TriggersPlpython et Triggers
Plpython et TriggersAffinitic
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 

Similaire à Plop : un micro-générateur pour se simplifier la vie au quotidien (20)

Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidien
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
Kick starting OpenERP
Kick starting OpenERPKick starting OpenERP
Kick starting OpenERP
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume Faure
 
Titanium studio et les modules
Titanium studio et les modulesTitanium studio et les modules
Titanium studio et les modules
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharp
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Plpython et Triggers
Plpython et TriggersPlpython et Triggers
Plpython et Triggers
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 

Plus de Nicolas Carlo

The Secrets of Hexagonal Architecture
The Secrets of Hexagonal ArchitectureThe Secrets of Hexagonal Architecture
The Secrets of Hexagonal ArchitectureNicolas Carlo
 
Hexagonal architecture & Elixir
Hexagonal architecture & ElixirHexagonal architecture & Elixir
Hexagonal architecture & ElixirNicolas Carlo
 
À la découverte des Observables - HumanTalks Paris 2017
À la découverte des Observables - HumanTalks Paris 2017À la découverte des Observables - HumanTalks Paris 2017
À la découverte des Observables - HumanTalks Paris 2017Nicolas Carlo
 
À la découverte des observables
À la découverte des observablesÀ la découverte des observables
À la découverte des observablesNicolas Carlo
 
Testing Marionette.js Behaviors
Testing Marionette.js BehaviorsTesting Marionette.js Behaviors
Testing Marionette.js BehaviorsNicolas Carlo
 
Chaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreChaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreNicolas Carlo
 
Kanban et Game Development avec Trello
Kanban et Game Development avec TrelloKanban et Game Development avec Trello
Kanban et Game Development avec TrelloNicolas Carlo
 
Tester ses Behaviors Marionette.js
Tester ses Behaviors Marionette.jsTester ses Behaviors Marionette.js
Tester ses Behaviors Marionette.jsNicolas Carlo
 
Chaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscoreChaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscoreNicolas Carlo
 
Comment organiser un gros projet backbone
Comment organiser un gros projet backboneComment organiser un gros projet backbone
Comment organiser un gros projet backboneNicolas Carlo
 

Plus de Nicolas Carlo (10)

The Secrets of Hexagonal Architecture
The Secrets of Hexagonal ArchitectureThe Secrets of Hexagonal Architecture
The Secrets of Hexagonal Architecture
 
Hexagonal architecture & Elixir
Hexagonal architecture & ElixirHexagonal architecture & Elixir
Hexagonal architecture & Elixir
 
À la découverte des Observables - HumanTalks Paris 2017
À la découverte des Observables - HumanTalks Paris 2017À la découverte des Observables - HumanTalks Paris 2017
À la découverte des Observables - HumanTalks Paris 2017
 
À la découverte des observables
À la découverte des observablesÀ la découverte des observables
À la découverte des observables
 
Testing Marionette.js Behaviors
Testing Marionette.js BehaviorsTesting Marionette.js Behaviors
Testing Marionette.js Behaviors
 
Chaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreChaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscore
 
Kanban et Game Development avec Trello
Kanban et Game Development avec TrelloKanban et Game Development avec Trello
Kanban et Game Development avec Trello
 
Tester ses Behaviors Marionette.js
Tester ses Behaviors Marionette.jsTester ses Behaviors Marionette.js
Tester ses Behaviors Marionette.js
 
Chaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscoreChaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscore
 
Comment organiser un gros projet backbone
Comment organiser un gros projet backboneComment organiser un gros projet backbone
Comment organiser un gros projet backbone
 

Plop : un micro-générateur pour se simplifier la vie au quotidien

  • 1. 1 PLOPPLOP : UN: UN MICRO-GÉNÉRATEURMICRO-GÉNÉRATEUR POUR SEPOUR SE SIMPLIFIER LA VIESIMPLIFIER LA VIE AU QUOTIDIENAU QUOTIDIEN
  • 3. 3 . 1 KEZAKOKEZAKO PLOPPLOP > UN MICRO-GÉNÉRAQUOI ?> UN MICRO-GÉNÉRAQUOI ?
  • 4. 3 . 2 GÉNÈRE DEGÉNÈRE DE NOUVEAUX FICHIERSNOUVEAUX FICHIERS À PARTIR DEÀ PARTIR DE TEMPLATESTEMPLATES Évite d'aller copier/coller un autre fichier « similaire » (lequel ?), puis supprimer les lignes inutiles et déclarer tout ça où il faut (sans se tromper ?) On écrit plop, on répond à quelques questions et TADAAA !
  • 5. 3 . 3 GAIN DE TEMPSGAIN DE TEMPS && MOINS D'ERREURSMOINS D'ERREURS AU QUOTIDIENAU QUOTIDIEN
  • 6. 4 . 1 COMMENTCOMMENT ÇA MARCHE ?ÇA MARCHE ? > INSTALLATION, CONFIGURATION…> INSTALLATION, CONFIGURATION…
  • 7. 4 . 2 INSTALLATIONINSTALLATION $ npm install --save-dev plop { "name": "your-awesome-project", "description": "An awesome project", "devDependencies": { "plop": "1.4.1" }, "scripts": { "generate": "plop" } } $ npm run generate $ npm install -g plop $ plop GlobalLocal
  • 8. 4 . 3 CONFIGURATIONCONFIGURATION Plop a besoin d'un plopfile.js et de templates. module.exports = function (plop) {};
  • 9. 4 . 4 LES TEMPLATESLES TEMPLATES C'est du !Handlebars /** * TODO - Describe what your model does. * * @class {{pascalCase name}}.Model * @module {{pascalCase name}} * @constructor */ import {Model} from "backbone"; export default Model.extend( { initialize() { // Executed on model initialization } } ); On a accès : aux variables du prompt aux / définishelpers partials plop.addHelper( name, helper ); plop.addPartial( name, template ); Dans plopfile.js :
  • 10. 4 . 5 CRÉER UN GÉNÉRATEURCRÉER UN GÉNÉRATEUR module.exports = function ( plop ) { plop.setGenerator( "module", { description: "create a new module", prompts: [], actions: [] } ); }; plop.setGenerator( name, config ); Création Utilisation
  • 11. 4 . 6 GÉNÉRATEURGÉNÉRATEUR −− PROMPTSPROMPTS module.exports = function ( plop ) { plop.setGenerator( "module", { description: "create a new module", prompts: [ { type: "input", name: "name", message: "What is your module name?", validate: function (value) { if ((/.+/).test(value)) { return true; } return "name is required"; } } ], // … } ); }; C'est du !Inquirer
  • 12. 4 . 7 GÉNÉRATEURGÉNÉRATEUR −− ACTIONSACTIONS module.exports = function ( plop ) { plop.setGenerator( "module", { description: "create a new module", // … actions: [ { type: "add", path: "modules/{{camelCase name}}.js", templateFile: "templates/module.js" } ] } ); }; 2 types d'actions : add modify Strings parsées avec Handlebars
  • 13. 4 . 8 GÉNÉRATEURGÉNÉRATEUR −− ACTIONSACTIONS actions: function( data ) { var actions = []; if( data.wantTacos ) { actions.push( { type: "add", path: "folder/{{dashCase name}}.txt", templateFile: "templates/tacos.txt" } ); } else { actions.push( { type: "add", path: "folder/{{dashCase name}}.txt", templateFile: "templates/burritos.txt" } ); } return actions; } actions peut aussi être une fonction qui : prend les réponses de prompts en paramètre retourne le tableau des actions à effectuer Permet d'adapter les actions en fonction des réponses données
  • 14. 5 . 1 POURQUOIPOURQUOI PLOP ?PLOP ? > ET POURQUOI PAS> ET POURQUOI PAS YEOMANYEOMAN HEIN ?HEIN ?
  • 15. 5 . 2 AVANTAGESAVANTAGES DE PLOP SUR YEOMANDE PLOP SUR YEOMAN Léger, embarqué dans le projet = maintenance plus simple Simple à prendre en main, plus facilement adopté car peu coûteux
  • 16. 5 . 3 DES USE CASESDES USE CASES DIFFÉRENTSDIFFÉRENTS scaffold un nouveau projet selon des standards bootstrap de nouveaux fichiers dans le cadre de ce projet (standard) PlopYeoman bootstrap de nouveaux fichiers selon les standards personnalisés d'un projet KISS = commencer avec plop, compliquer au besoin.
  • 17. 6 MERCI !MERCI ! DES QUESTIONS ?DES QUESTIONS ? Plop : https://github.com/amwmedia/plop Blog post : http://bit.ly/22hX160