jueves, 31 de diciembre de 2015

Juno Cheerio


He publicado mi primer módulo de node ^^

https://github.com/akobashikawa/juno-cheerio

https://www.npmjs.com/package/juno-cheerio

juno-cheerio es un template engine para Express que permite hacer unobtrusive templating usando cheerio.

Explicando

Express usa template engines para renderizar html con cierto código de template incluido. Por default es jade, pero puede usar handlebars, nunjucks, etc.

Usar un template engine típico involucra aprender el lenguaje de templating y hacer disección y reagrupamiento del html base para adecuarlo a los requerimientos del template.

Unobtrusivo es respetar el html base lo más que se pueda.

¿Por qué no una forma unobtrusiva de trabajar con el html base?

La ventaja es similar a la que se tiene al trabajar de modo unobtrusivo en el frontend: Es más fácil de mantener el html y el javascript por separado. Pero otra ventaja (aún no implementada en juno) es que se podría usar html de un url externo, no solamente de archivos locales.

En el lado del frontend, jQuery ayuda a trabajar de forma unobtrusiva. ¿Qué tal si pudiéramos aplicar esta idea al lado backend?

Cheerio provee las funcionalidades de jQuery para Node en el backend.

juno-cheerio es un ejemplo de cómo usar cheerio para proveer unobtrusive templating.

Con juno-cheerio, uno puede usar su experiencia jQuery para hacer templating en Express de una manera unobtrusiva.

El proceso de publicación

Separé el módulo en una carpeta json-cheerio, con index.js con el código del módulo y package.json con la descripción.

package.json
{
    "name": "juno-cheerio",
    "description": "Simple Express template engine for unobtrusive templating with cheerio",
    "author": "Rulo Kobashikawa <akobashikawa gmail.com> (http://akcdev.blogspot.com)",
    "version": "1.0.0",
    "main": "index.js",
    "license": "MIT",
    "repository": {
        "type": "git",
        "url": "https://github.com/akobashikawa/juno-cheerio"
    },
    "dependencies": {
        "cheerio": "^0.19.0",
        "fs": "0.0.2"
    }
}

index.js
var cheerio = require('cheerio');
var fs = require('fs');

module.exports = function(filePath, options, callback) {
    fs.readFile(filePath, function(err, content) {
        if (err) return callback(new Error(err));
        var html = content.toString();
        $ = cheerio.load(html);
        if (typeof options.replaces === 'function') {
            options.replaces($);
        }
        var rendered = $.html();
        return callback(null, rendered);
    });
};

Luego, obtuve una cuenta en https://npmjs.com. Allí indiqué cual sería mi nombre de usuario y mi password.

En la consola, me ubique en el directorio del proyecto y ejecuté npm adduser. Nos pedirá las credenciales que indicamos en npmjs.com

Finalmente, ejecuté npm publish ./

Si el nombre del proyecto ya estuviera tomado se obtendría un error.

Si ya hubiera publicada una versión con el mismo número, también se obtendría un error.