You are on page 1of 4

MdulosyNPMenNodeJS

QusonlosmdulosenNodeJS,elgestordepaquetesNPMquepermiteadministrarlos
mdulosydependenciasquenecesitamosenunproyectolocal.

EnelManualdeNodeJSestamospartiendocomobasedelascharlas#nodeIOofrecidasporAlejandro
MoralesparaDesarrolloWeb.com.Enestecasotodavanosencontramosviendocontenidodenuestra
primeracharla,enlaquenuestroponentenosinformadeunadelaspartesfundamentalesen
nuestrosprocesosdedesarrolloenNodeJS,comosonlosmdulos.Adems,vimoselgestorde
paquetesquevieneenelframework.

EnNodeJSelcdigoseorganizapormediodemdulos.Soncomolospaquetesolibrerasdeotros
lenguajescomoJava.Porsuparte,NPMeselnombredelgestordepaquetes(packagemanager)que
usamosenNodeJS.
SiconoceslosgestoresdepaquetesdeLinuxpodrshacerteunabuenaideadeloqueesnpm,sino,
puessimplementeentindelocomounaformadeadministrarmdulosquedeseastenerinstalados,
distribuirlospaquetesyagregardependenciasatusprogramas.
Nota:Porejemplo,siestsacostumbradoaUbuntu,elgestordepaquetesqueseutilizaesel"aptget".
Porsuparte,FedoraoRedHatusanYum.EnMac,porponerotroejemplo,existeungestorde
paquetesllamadoHomebrew.
Elgestordepaquetesnpm,noobstante,esunpoquitodistintoaotrosgestoresdepaquetesque
podemosconocer,porquelosinstalalocalmenteenlosproyectos.Esdecir,aldescargarseunmdulo,
seagregaaunproyectolocal,queeselquelotendrdisponibleparaincluir.Aunquecabedecirque
tambinexistelaposibilidaddeinstalarlospaquetesdemaneraglobalennuestrosistema.

Incluirmduloscon"require"
Javascriptnativonodasoportealosmdulos.EstoesalgoquesehaagregadoenNodeJSyserealiza

conlasentenciarequire(),queestinspiradaenlavariantepropuestaporCommonJS.
Lainstruccinrequire()recibecomoparmetroelnombredelpaquetequequeremosincluireiniciauna
bsquedaenelsistemadearchivos,enlacarpeta"node_modules"ysushijos,quecontienentodoslos
mdulosquepodranserrequeridos.
Porejemplo,sideseamostraernoslalibreraparahacerunservidorweb,queescuchesolicitudeshttp,
haramoslosiguiente:
varhttp=require("http")
Existendistintosmdulosqueestndisponiblesdemanerapredeterminadaencualquierproyecto
NodeJSyqueportantononecesitamostraernospreviamentealocalmedianteelgestordepaquetes
npm.Esostomanelnombrede"Mdulosnativos"yejemplosdeellostenemoselpropio"http","fs"
paraelaccesoalsistemadearchivos,"net"queesunmduloparaconexionesderedtodavadems
bajonivelque"http"(dehecho"http"estmayormenteescritosobreelmdulo"net"
github.com/joyent/node/blob/master/lib/http.js),"URL"quepermiterealizaroperacionessobre"url",el
mdulo"util"queesunconjuntodeutilidades,"child_process"quetedaherramientasparaejecutar
sobreelsistema,"domain"quetepermitemanejarerrores,etc.

Podemoscrearfcilmentenuestrosmdulosexportandolas
funcionesquedeseemos
Porsupuesto,nosotrostambinpodemosescribirnuestrospropiosmdulosyparaellousamos
module.exports.Escribimoselcdigodenuestromdulo,contodaslasfuncioneslocalesque
queramos,luegohacemosunmodule.exports={}yentrelasllavescolocamostodoaquelloque
queramosexportar.
functionsuma(a,b){
returna+b
}
functionmultiplicar(a,b){
returna*b
}
module.exports={
suma:suma,
multiplicar:multiplicar
}
Asumiendoqueelarchivoanteriorsellameoperaciones.js,nosotrospodriamosrequerirlomstardee

otroarchivo.jsdelasiguientemanera:
varoperaciones=require('./operaciones')
operaciones.suma(2,3)
Obviamente,estoessolounatomadecontactoyvolveremossobreesteasuntomsadelante.

Comandonpmparagestindepaquetes
Porloquerespectaalusodenpm,esuncomandoquefuncionadesdelalneadecomandosde
NodeJS.Portantolotenemosqueinvocarconnpmseguidodelaoperacinquequeramosrealizar.
npminstallasync
Estoinstalarelpaqueteasyncdentrodemiproyecto.Loinstalardentrodelacarpeta
"node_modules"yapartirdeesemomentoestardisponibleenmiproyectoypodrincluirlopormedio
de"require":
require("async")
Nota:Cabefijarseenquenohacefaltadarlelarutaalpaquete"async"porquenpmmelohainstalado
dentrodenode_modulesytodoloqueestenesacarpetaseencuentradisponiblepararequire()sin
necesidaddedecirlelarutaexactaparallegar.
Otrasinstruccionesposiblesdenpmsonladepublicarpaquetes(con"publish"),instalarglobalmente
(poniendoelflaggalhacerel"install"),desinstalar,inclusopremiar(puntuarpaqueteshechospor
otraspersonas),etc.
Podemosverpaquetesainstalarentrandoenlapginadelgestordepaquetesnpm:npmjs.org
Porltimo,sobrenpmsemencionquecadapaquetetieneentresucdigounarchivopackage.json
quecontieneennotacinJSONlosdatosdelpaqueteens.Escomounatarjetadeidentificacindel
paquete,quepuedeservirparainformarteatimismoyacualquiersistemainformticodesus
caractersticas.Sitfueraselcreadordeunpaquete,ocrearasalgunaaplicacinconNodeJS,tambin
deberasincluir"package.json"conlosdatosdelmdulooaplicacinqueseestcreando,comosonel
autor,versin,dependencias,etc.
Enelsiguienteartculovamosaveralgomsespecfico,quetambinnossirvacomoprimerejemplo
pararealizarenNodeJS.EnconcretoveremoselmduloHTTP,conelquepodremoshacerun
rudimentarioservidorweb.

Instalarpaquetesdemaneraglobalconnpm
Comosehadichoantes,npminstalalospaquetesparaunproyectoenconcreto,sinembargoexisten

muchospaquetesdeNodequetefacilitantareasrelacionadasconelsistemaoperativo.Estos
paquetes,unavezinstalados,seconviertenencomandosdisponiblesenterminal,conlosquese
puedenhacermultituddecosas.ExistencadavezmsmdulosdeNodequenosofrecenmuchas
utilidadesparalosdesarrolladores,accesiblesporlneadecomandos,comoBower,Grunt,etc.
Lasinstruccionesparalainstalacindepaquetesdemaneraglobalsonprcticamentelasmismasque
yahemospasadoparalainstalacindepaquetesenproyectos.Enestecasosimplementecolocamos
laopcin"g"quepermitequeesecomandoseinstaledemaneraglobalentusistemaoperativo.
npminstallggruntcli
Esecomandoinstalaelmdulogruntclidemaneraglobalentusistema.