Node - npm, Node Packet Manager
För att skriva lite större och vettigare program behöver vi lägga till lite funktionalitet till Node. Detta är iofs inte helt nödvändigt, men det kommer att göra vårt arbete mycket enklare. Tillägg till Node leveraras vanligtvis i så kallade paket. Man kan ladda ner, installera och hantera paket till Node manuellt, men det finns ett långt mycket bättre sätt att hantera dessa.
Node har en bra paketshanterare som heter npm – vilket är en förkortning av ”Node Packet Manager”. Med hjälp av denna så kan man enkelt ladda ner och lägga till paket vars innehåll tillhandahåller extra funktionalitet som man kan använda i applikationer. Detta kan vara alltifrån småbibliotek till gigantiska ramverk. När du installerade Node så följde npm med på köpet.
npm är ett kommandoradsverktyg. Många av verktygen kring Node är kommandoradsbaserade, så det kan vara bra om du försöker lära dig lite mer om hur kommandoraden fungerar på ditt system. Du måste alltså skriva en del kommandon för att kunna använda dig av npm. Hur det fungerar beror lite på vilken plattform du jobbar på. På Windows kan du t.ex. trycka på Windows-tangenten och skriva ”cmd
” följt av enter. Du hamnar då i en kommandoprompt där du kan köra dina npm-kommandon.
npm-kommandon
Rent generellt används npm-kommandon på formen:
npm <kommando>
Där kommando
anger vilken funktion man vill att npm ska genomföra. I vissa fall kan man även lägga till extra parametrar för att ytterligare styra hur kommadot utförs.
Vi ska ta och titta på några npm-kommandon som kan vara bra att kunna.
install
En av de viktigaste funktionerna i npm är förstås möjligheten att hämta hem och installera paket. Detta görs med kommandot ”install
”. Förutom att den installerar ett paket, så hämtar den även hem det ifrån nätet (det går även att installera lokala paket som man hämtat själv). Om man inte anger att man vill ha en speciell version, så hämtas den senaste versionen av paketet hem.
En av de bästa finesserna i npm är att den försöker vara smart i hur den installerar saker. Om den märker att det paket du vill installera bygger på innehåll i andra paket, kommer den att hämta hem även dessa paket och installera dem samtidigt.
Paket installeras antingen globalt eller lokalt. Globalt installerade paket är tillgängliga för alla Node-applikationer på din maskin. Lokala paket är enbart tillgängliga i den katalog de är installerade, oftast har man en applikation per katalog. Vi kör några installationsexempel och tittar sedan vidare på skillnaden mellan globala och lokala paket.
Global installation
Om du t.ex. vill installera tillägget ”Express Generator”, kan du skriva följande på din kommandorad (gör gärna detta, då vi kommer att använda detta paket i kommande exempel):
npm install -g express-generator
Detta kommer att hämta ner och installera paketet ”express-generator”. Flaggan ”-g
” anger att det ska installeras globalt, så att alla node-applikationer på systemet kan använda sig av paketet. "Express Generator" bygger på flera andra paket. Även dessa laddas ner och installeras. Då vi angett att "Express Generator" ska installeras globalt, så installeras även de behövliga hjälppaketen globalt.
”Express Generator” är till för att skapa en grundmall för node-applikationer som baserad kring ramverket Express. Den körs i en tom katalog och den fyller då på med det grundinnehåll som krävs för att skapa en vettig Express-applikation. Detta gör att det här är ett paket som är mest vettigt att ha installerat globalt. Du kommer att vilja köra det från många olika kataloger och det finns ingen anledning att kalla på det ifrån dina applikationer. Det skapar helt enkelt extra funktionalitet till hela ditt system.
Lokal installation
Om du utelämnar ”-g
-flaggan, kommer paketet att installeras i den katalog du befinner dig. Man vill alltså först förflytta sig till den katalog som innehåller den applikation till vilken man vill lägga till paketet. Detta kan vara en tom katalog, i vilken du vill skapa en ny applikation. Det kan även vara en katalog som redan innehåller en applikation, till vilken du vill lägga till mer funktionalitet.
Vi ska prova på att installera ett lokalt paket också. Skapa en tom katalog och förflytta dig dit. Se till att du befinner dig i rätt katalog i kommandoraden. Kör sedan följande kommando:
npm install lodash
Ovanstående kommando kommer att installera ett paket innehållandes JavaScript-bibliotektet Lodash.
Lista filerna i din katalog. Nu bör katalogen inte vara tom längre. Under installationen skapades katalogen ”node_modules
”. Inuti denna katalog lägger npm alla paket som installerats lokalt. I ”node_modules
”-katalogen finns nu en katalog som innehåller det paket du installerade. Efter vi körde ovanstående kommando, bör det ha skapats en underkatalog vid namn ”lodash
. I denna katalog ligger den senaste versionen av Lodash eller i alla fall den senaste versionen som pakterats som ett npm-paket. Den är nu klar att användas i din Node-applikation. I en senare aktivitet ska vi titta på hur man använder paket ifrån Node.
Om ”node_modules
”-katalogen inte skapades, så gick något fel med installationen. Ditt npm-kommando bör då ha skrivit ut ett felmeddelande. När något går fel med npm får man förutom ett kortfattat felmeddelande en fil som mer detaljerat beskriver vad som gick fel. Den filen heter ”npm-debug.log
” och den beskriver varje steg som npm försökte genomföra och talar om vilka fel som inträffade. Denna fil skapas enbart när något går fel.
Varje Node-applikation som har lokala paket innehåller alltså en ”node_modules
”-katalog. Detta gör att man kan ha flera versioner av samma paket liggandes på olika platser på datorn. Detta kan verka ineffektivt. Dock så är detta bra om man vill flytta en applikation, t.ex. när man vill ta den ifrån utvecklingsmiljön till den server där den ska köras på ”riktigt”. Med detta förfarande så finns allt behövligt med i en och samma katalog och det blir enklare att förflytta applikationen. Detta gäller förstås enbart lokala paket, eventuella globala paket som din applikation beror på måste installeras på alla maskiner där applikationen ska köras.
update
När du väl installerat några paket med npm, är det enkelt att hålla dem uptodate. Detta kan du göra genom att köra följande kommando:
npm update
Kommandot ovan uppdaterar alla lokala paket. För att uppdatera globala paket lägger du bara till ”-g
”-flaggan till kommandot (detta gäller för så gott som alla npm-kommandon).
update
kommer även att installera paket som eventuellt saknas för att din applikation ska kunna köras. Detta gör den genom att läsa av innehållet i ”package.json
”-filen. Detta är en fil som innehåller information om din applikation. Vi återkommer till denna i nästa aktivitet.
Det är alltså inte så svårt att uppdatera de extra paket som ens applikation använder sig av. Dock kan det vara på sin plats att vara lite försiktig när man uppdaterar. Om det skett en rejält stor uppdatering av något paket kanske detta har genomgått förändringar som påverkar hur det ska användas. Detta kanske påverkar din applikation, i värsta fall kanske den inte går att köra längre. Det är alltid en bra idé att ha en backup av sitt projekt så att man kan backa tillbaka ett steg om något liknande inträffar.
Att styra paket-version
Eftersom det kan vara viktigt att ha en specifik version av ett paket, finns det en mekanism som kan styra vilka versioner som ska användas.
För det första kan du ange en specifik version när du gör din installation av paketet. Detta gör du genom att lägga till följande efter paketnamnet; @<versionsnummer>
. För att installera version 3.10.1 av Lodash, skulle man alltså utföra följande kommando:
npm install lodash@3.10.1
Man kan även styra versionen genom att använda sig av ”package.json
”-filen. Detta är en fil som bland annat styr vilka paket som krävs för din applikation ska kunna köras. I nästa aktivitet kommer vi att gå igenom denna i mer detalj.
list
Med kommandot list
kan du få en lista över vilka paket som är installerade. Om du kör:
npm list
Får du upp en lista som innehåller alla paket som är installerade i den katalog du befinner dig. Listan visar även vilka beroenden varje paket har till andra paket. Skulle du vilja ha specifik information enbart för ett paket, låt oss säga Lodash, kan du skriva följande:
npm list lodash
Även här kan du lägga till flaggan -g
och då får du en lista som gäller de globala paketen istället.
uninstall
Om du vill ta bort ett paket så kan du göra det med uninstall
-kommandot. För att ta bort Loadash skulle man alltså skriva:
npm uninstall lodash</code>
Som vanligt kan du lägga till flaggan -g
om du vill avinstallera ett globalt paket.
Skrapat på ytan...
Det finns många fler kommandon som du kan använda tillsammans med npm. Ovanstående bör dock räcka till det mesta som du kan tänkas vilja göra.
Nästa aktivitet
Vi ska nu titta på hur ”package.json
”-filen kan användas.