WORDS
Navigera i webbdjungeln: Pakethantering och beroenden
När din applikation börjar använda mer än något enstaka bibliotek, kan det vara bra att organisera alla dina beroenden med hjälp av en pakethanterare. I den här artikeln går vi igenom vad du behöver, men här följer en sammanfattning om du inte är intresserad av detaljerna.
- För enklare projekt krävs ingen pakethanterare.
- Npm bör vara din första pakethanterare.
- Om du vill använda ett "snyggare" verktyg, kan du använda Yarn.
- Undvik alternativ som Bower och Nuget för Javascript.
Terminologi
Innan vi sätter igång, kan det vara bra att ha koll på vad dom relevanta orden betyder.
Beroende (eng. dependency): Ett bibliotek eller ramverk som din applikation behöver för att fungera. Beroenden kan stå i flera led, där ett bibliotek du är beroende av, har ett beroende på ett annat bibliotek. Beroenden i flera led kallas för transitiva beroenden.
Paket (eng. package): Ett bibliotek eller ramverk. Din applikation är också ett paket, även om du inte gör applikationen tillgänglig för andra att använda i sina paket.
Pakethanterare (eng. package manager): Program som hjälper dig att hämta, installera och organisera olika versioner av paket, så att du kan bygga och köra din applikation.
Register (eng. registry): Central databas över paket. Denna databas används av pakethanterare för att hitta och hämta paket och deras versioner.
Låsfil (eng. lock file): För att hålla koll på exakt vilken version som har installerats använder pakethanterare låsfiler. Dom "låser" vilken version används, så även om beroendet inte kräver en exakt version (t.ex. anger beroende på version
1.*.*
) kan pakethanteraren se till att det alltid blir exakt version1.3.5
.
Skript-taggar
Du kanske inte behöver någon pakethanterare över huvud taget. För små projekt, där din kod finns i några enstaka Javascript-filer och du har något enstaka beroende, så går det alldeles utmärkt att helt enkelt ladda ner filen och inkludera den i din applikation med en skript-tagg:
<script defer src="jquery.min.js"></script>
Denna blogg är ett exempel på projekt där jag har tyckt att det räcker med skript-taggar. Ett par ytterligare exempel UglifyJS online och första versionen av Base Convert.
Om du använder ett språk som kompilerar till Javascript, såsom Typescript, bör du använda pakethanterare.
Npm och Npm-registret
Många bibliotek för webbläsare fungerar också i Node - på servern eller i byggprocessen. På så vis har man sammanfogat det som annars skulle kunna bli två stora ekosystem. Npm-registret (eng. the Npm registry) är den enda relevanta databas med Javascript-paket år 2019, och då är det också enklast att använda Npm för att arbeta med paketen. Npm är populärt och dom flesta guider förutsätter att man använder Npm.
För att hålla koll på dina paket använder du en fil package.json
i projektroten. Efter installation av beroenden, hittar man dom i mappen node_modules/
, för det är där Node letar efter beroenden som standard. Eftersom du inte vill publicera hela node_modules
-mappen, är det här ett bra tillfälle att använda ett byggverktyg, vilket vi kommer gå igenom i nästa del i den här serien. Som låsfil använder Npm package-lock.json
.
Npm bör vara din första pakethanterare.
Yarn
I verktyget Npm har man historiskt gjort några tveksamma val. Därför har Facebook utvecklat ett alternativ: Yarn. För att inte dela ekosystemet mitt itu, använder Yarn samma register som Npm, Npm-registret. Yarn har en egen låsfil: yarn.lock
.
Andra alternativ
Det finns alternativ till Npm-registret, men åtminstone dessa bör undvikas:
- Bower: Innan Npm-registret tog över var det många som använde Bower som pakethanterare. Det är inte lika flexibelt och dom rekommenderar sedan 2017 att man går över till Yarn.
- Nuget: I .Net-världen är Nuget populärt, men det bör inte användas för Javascript-bibliotek, även om Nuget har ett visst stöd för det. Nuget-paketen interagerar dåligt med resten av Javascript-ekosystemet och det blir svårare att hitta lösningar om något krånglar.
Översikt
För att lättare förstå vilken roll Npm och Yarn spelar, kan man jämföra med verktyg som används vid utveckling i andra programmeringsspråk.
Språk/miljö | Verktyg |
---|---|
Javascript, NodeJS | Npm, Yarn |
.Net | Nuget |
Java | Maven |
Python | Pip |