Hooks para npm y bower

Hace algún tiempo escribí un post sobre algunos hooks que tiene git y como es posible automatizar tareas con ellos.

npm también dispone de algunos hooks, como preinstall y postinstall.

Estos deben ser configurados en la sección scripts del archivo package.json

...
"scripts": {
    "postinstall": "ejecutar un comando después de install"
}
...

Por ejemplo, si queremos que después de instalar las dependencia de node se instalen las de bower, podemos usar el hook postinstall

"postinstal": "bower install"

Con lo cual, después de ejecutar el comando

npm install

Automáticamente se ejecutara

bower install

Del mismo modo, tenemos los hook de bower, Estos deben ser configurados en el archivo .bowerrc. Si queremos que después de la instalación de bower se copien algunos archivos desde bower_componets a otro directorio, podemos user el hook postinstall de bower

...
    "scripts": {
        "postinstall": "cp bower_components/some-package/build/some-package.min.js public"
    }
...

Mucho de lo anteriormente descrito se puede hacer con grunt/gulp, pero en algunos casos, cuando queremos automatizar tareas simples es posible prescindir de grunt.

Un post interesante sobre como crear scripts para npm es How to Use npm as a Build Tool de Keith Cirkel, donde describe como crear scripts para ejecutar con npm y como crear post- y pre- hook para ellos.

Probando paquetes en diferentes versiones de python con tox

Cuando creas un paquete para python y quieres testearlo sobre varias versiones, python2.7, python3.3, etc, es posible hacerlo creando manualmente varios entornos virtuales con virtualenv, uno para cada versión, o automatizar este proceso con tox.

Para instalar tox

pip install tox

Para utilizarlo es necesario crear un archivo de configuración tox.ini

[tox]
envlist = py26, py27
[testenv]
deps=nose
commands=nosetest

Y lanzar tox

tox

En el archivo tox.ini se especifican algunos paramétros como:

  • envlist describe los entornos a utilizar. tox interpreta py26 como python2.6 y py27 como python2.7.
  • deps, las dependencias a instalar en cada entorno.
  • commands comandos a utilizar en cada entorno después de instalar las dependencias.

Cada uno de los entornos creados es independiente entre ellos e independiente del entorno principal del sistema. Ellos son almacenados como entornos virtuales en un directorio llamado .tox, ubicado donde llamamos a tox, son creados la primera vez que tox es ejecutado y reutilizados la siguientes veces, por lo que la primera vez puede tomar un par de segundos más que las siguientes.

Normalmente, además de lanzar los test, me gusta verificar el code style, PEP8, por que lo que en el archivo tox.ini agrego un entorno donde no se ejecutan los test, solo se instala y ejecuta flake8 para verificar el code style.

[tox]
envlist = flake8, py27, py34

[testenv]
deps=nose
commands=nosetest

[testenv:flake8]
deps = flake8
commands = flake8

Referencias