Curso de




Día 2: Gestión de Paquetes con NPM

Vuestro anfitrión


(según mi hija de 5 años)

Más de 15 años de experiencia en desarrollo
Ingeniero senior en MediaSmart Mobile
Co-organizador de Node.js Madrid
Cacharreador impenitente
@pinchito

Guión


  • NPM: gestión de paquetes
  • Sesión práctica: instalación
  • Anatomía de un módulo
  • Sesión práctica: crea tu propio paquete

NPM

Gestión de paquetes

Comandos NPM


  • npm install: instala un paquete (o varios)
  • npm install -g: instalación global
  • npm update: actualiza un paquete (o varios)
  • npm remove: elimina un paquete
  • npm test: corre los tests del paquete


Fuente: npm-index

Resolución de Directorios

Local:

            node_modules
../node_modules
../../node_modules
...
$HOME/node_modules
./node_modules

Global:

{prefix}/lib/node_modules

donde {prefix} normalmente es /usr/local


Fuente: npm-folders

Sesión Práctica 1: instalación

Queremos usar el paquete simplecached


Instalación:

npm install simplecached

Importación con require:

var simplecached = require('simplecached');

Fuente: simplecached

Usa los paquetes importados


Importación con require:

var simplecached = require('simplecached');

var server = new simplecached.Server(port);

var client = new simplecached.Client(port);

client.set(key, value, function(error) {});

client.get(key, function(error, value) {}); 

¿Falla? ¡Es una condición de carrera!
Resuélvela

Usa npm


Corre npm install sin parámetros

Corre npm list para ver lo que tienes instalado

Corre npm update sin parámetros

Corre npm remove simplecached
y luego npm list

¡Bien!

Creando Módulos






Crear módulos es fácil y divertido

Anatomía de un módulo


Fichero léeme: README.md


Definición: package.json


Punto de entrada: index.js


Código: lib/

Documentación: doc/

Binarios: bin/

aNATOMía de un package.json

{
"name": "simplecached",
"version": "0.0.1",
"description": "Simplified memcached server.",
"contributors": ["Alex Fernández <alexfernandeznpm@gmail.com>"],
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/alexfernandez/simplecached"
},
"dependencies": {
"testing": "0.1.x"
},
"keywords" : ["simplecached", "didactic", "memcached", "caching"],
"bin": {
"simplecached": "bin/server.js"
},
"scripts": {
"test": "node test.js"
},
}

Fuente: package.json

Dependencias


  • dependencies: se instalan siempre
  • devDependencies: se instalan sólo directamente
  • optionalDependencies: no pasa nada si faltan



Fuente: package.json dependencies

Especificación de versiones


  • "1.2.3": versión específica
  • ">=1.2.3": mayor que la dada
  • "~1.2.3" (churro): fija la versión menor (1.2.x) y más
  • "^1.2.3" (caret): fija la versión mayor (2.x.x) y más
  • "*" (asterisco): cualquier versión
  • URL: "http://asdf.com/asdf.tar.gz"
  • Git: "git+ssh://user@hostname:project.git#commit"



Fuente: package.json dependencies, semver


Sesión Práctica 2: Tu Primer Módulo


Mueve todo a su sitio:

  • Código a lib
  • Documentación a doc


Crea index.js que requiere el resto

Crea un package.json


Nombre y descripción


Depende de simplecached



Usa npm


Corre npm install sin parámetros

Corre npm list para ver lo que tienes instalado

Publica con npm publish


¡Y ahora bórralo! con npm unpublish --force


Crea un binario


Crea un script en bin/script.js


Añade el script al package.json


Instala loadtest como global

y comprueba el binario loadtest


Corre las pruebas de loadtest

Cool!

Thanks!