Éviter 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 ?)
npm install -g yo
npm install -g generator-webapp
Installer Yeoman
Installer un générateur
yo webapp
Scaffold un projet
yo angular:controller MyNewController
Bootstrap un fichier
Getting started: http://yeoman.io/learning/index.html
« Micro-generator framework that makes it easy for an entire team to create files with a level of uniformity »
Getting started: https://github.com/amwmedia/plop
Dans le projet :
plopfile.js
module.exports = function (plop) {};
npm install -g plop
Installer Plop
Léger, embarqué dans le projet = maintenance plus simple
Simple à prendre en main, plus facilement adopté car peu coûteux
Plop
Yeoman
Pour découvrir plop plus en détail : http://bit.ly/22hX160
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
}
} );
plop.addHelper( name, helper );
plop.addPartial( name, template );
Dans plopfile.js
:
module.exports = function ( plop ) {
plop.setGenerator( "module", {
description: "create a new module",
prompts: [],
actions: []
} );
};
plop.setGenerator( name, config );
Création
Utilisation
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 !
module.exports = function ( plop ) {
plop.setGenerator( "module", {
description: "create a new module",
// …
actions: [
{
type: "add",
path: "modules/{{camelCase name}}.js",
templateFile: "templates/module.js"
}
]
} );
};
3 types d'actions :
Strings parsées avec Handlebars
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 :
prompts
en paramètrePermet d'adapter les actions en fonction des réponses données