Commencez par créer un répertoire bbtools. Ensuite dans ce répertoire, créez un fichier package.json avec le contenu suivant :
{
"name": "bbtools",
"version": "0.0.0",
"bin": { "bb": "bb.js"},
"dependencies": {
"underscore": "1.6.0"
}
}
L'objectif étant de disposer d'une commande bb qui exécutera le fichier bb.js. Notez "underscore": "1.6.0", nous allons nous servir des capacités de "templating" de la librairie Underscore
Créez (dans le même répertoire) un fichier bb.tpl avec le contenu suivant :
/*--- <%= modelName %> Model ---*/
var <%= modelName %>Model = Backbone.Model.extend({
defaults : function (){
return {}
},
urlRoot : "<%= modelName.toLowerCase() %>s"
});
/*--- <%= modelName %>s Collection ---*/
var <%= modelName %>sCollection = Backbone.Collection.extend({
url : "<%= modelName.toLowerCase() %>s",
model: <%= modelName %>Model
});
Créez (dans le même répertoire) un fichier bb.js avec le contenu suivant :
#!/usr/bin/env node
var fs = require('fs');
var _ = require('underscore');
require.extensions['.tpl'] = function (module, filename) {
module.exports = fs.readFileSync(filename, 'utf8');
};
var tpl = _.template(require("./bb.tpl"));
var model_name = process.argv[2]
fs.writeFileSync(
process.cwd() +"/" + model_name + ".js"
, tpl({modelName :model_name})
);
#!/usr/bin/env node : rendra le fichier exécutable_.template(require("./bb.tpl")) va lire notre fichier bb.tpl et le transforme en objet template pour Underscoreprocess.cwd() permet de connaître le répertoire d'où l'on appelle la commande bbprocess.argv[2] permet d'obtenir le 1er argument passé à la commande bb (comme par exemple bb Human)tpl({modelName :model_name }) : on "explique" au template que l'on passe le contenu de model_name à modelName définie dans le templatePour que votre nouvelle commande soit disponible "partout" (pouvoir l'appeler de n'importe quel répertoire), tapez la commande suivante (on est toujours dans notre répertoire de développement) :
npm link
Si ce n'est pas déjà fait, cela va télécharger les dépendances nécessaires (underscrore dans notre cas), puis créer un "lien symbolique" vers votre fichier bb.js
Maintenant, de n'importe où, dans une console (terminal), vous pouvez taper bb Animal et cela vous génèrera votre fichier Animal.js avec votre modèle et votre collection.
Voilà, c'est très simple et utile. Si vous sentez que votre outil devient une usine à gaz, passez quand même à Yeoman ;).