Se asume que se tienen conocimientos básicos de git, github, Node.js, Sistemas basados en UNIX
Tomaremos como ejemplo el módulo YUIDocs el cuál nos permite la generación de documentación automática. Este módulo puede ser instalado mediante el comando:
De esta estamos instalando YUIDocs de manera global en nuestra PC.
En node_modules podemos ver todos los módulos de Node.js que han sido instalados hasta el momento, y ahora también YUIDocs (yuidoc).
También se habrá creado un link simbólico que apunta al fichero definido por el módulo como su ejecutable:
Si se quiere saber qué fichero es el que se ha definido como ejecutable de un módulo abrimos el fichero package.json que se encuentra en la raíz del módulo y buscamos la sentencia:
en este caso, la misma le indica a npm que debe crear un link simbólico cuyo nombre es “yuidoc ” y que el mismo va a apuntar al fichero ”./lib/cli.js” .
Buscamos en github el repositorio de desarrollo del módulo, y le hacemos fork.
Clonamos nuestro fork en nuestra carpeta local,
Agregamos un remote del repositorio original para estar sincronizados con las actualizaciones que se le hagan al módulo por parte de sus desarrolladores.
Sincronizamos el módulo con la última versión.
El anterior proceso se encuentra muy bien explicado en el sitio oficial de YUI3.
Bueno hasta aquí ya tenemos el módulo, en nuestra PC, sincronizado con los últimos cambios hechos al mismo por sus desarrolladores, y pudiéramos empezar a modificarlo. Una práctica recomendable es crear una nueva rama para cada nueva funcionalidad, y trabajar en ella por ejemplo:
Esto nos da la posibilidad de que si llegamos a un punto en el que queremos ir a la versión original simplemente nos cambiamos a la rama master y listo.
¿Cómo probar que nuestros cambios funcionan realmente como esperamos?
Suponiendo que estemos en la raíz de la carpeta que contiene el módulo que descargamos para que se instalen localmente las dependencias del módulo hacemos:
Luego creamos un link simbólico del fichero descrito en package.json como el bin, en nuestro ejemplo lib/cli.js.
De esta manera ejecutará el módulo nuestro y no el módulo que se ha instalado globalmente cuando hagamos: