node Module - global oder lokal installieren

Der Esel zwischen den zwei Heuhaufen

So fühlt man sich, wenn man mit nodejs startet, und bemerkt, das der Package-Manager (npm oder yarn) die Möglichkeit bietet Pakete Global, oder lokal zu installieren.

Wie soll man wissen, welches Paket besser global und welches lokal installiert werden sollte?

Nun gut, lass uns loslegen... gehen wir der Sache gemeinsam auf den Grund...



Am Anfang war der Bug

 Installiert man npm via Package-Manager unter Linux ist die Wahrscheinlichkeit groß, das man sich direkt ein paar Hausgemachte Probleme mit installiert.
Sollte bei dir der folgende Befehl Berechtigungsprobleme bei der Installation um die Ohren hauen, bist du leider auch von diesem Bug betroffen.

npm install -g color
 Führt man den gleichen Befehl mit sudo aus, funktioniert es einwandfrei? Ok, gebe dich damit aber nicht zufrieden! Zum einen ist es nicht ratsam, da dann alle global installierten npm-Pakete mit root-Rechten ausgeführt werden, zum anderen ist das Problem zwar momentan gelöst, wird dich aber später wieder einholen.

Eine Anleitung wie du das Problem beheben kannst, findest du in diesem Beitrag: npm -g braucht sudo ? - So nicht mehr...

Global vs Lokal

Der Sinn hinter globalen Paketen liegt darin, das man ein Modul projektübergreifend nutzen kann. Welche Installationsart gewählt werden sollte hängt maßgeblich von den Rahmenbedingungen ab.
Einige dieser Überlegungen möchten wir hier gemeinsam durchdenken.

Auslieferung von Software & Arbeiten im Team

nodejs Projekte haben eins gemeinsam, eine projekt.json Datei, welche die Grundkonfiguration des Projektes enthält. Diese Datei entählt unter anderem einen Bereich "dependencies".

Hier wird unter anderem auch die Abhängigkeiten zu anderen Paketen (siehe dependencies) definiert.

{
....
  "dependencies": {
    "chalk": "^1.1.3",
    "fs-extra": "^1.0.0",
    "gulp": "^3.9.1",
    "yargs": "^6.5.0"
  }
}
Führt man nun in dem Projektverzeichnis 

npm install
aus, werden alle angegebenen Abhängigkeiten automatisch lokal installiert - und zwar in das Unterverzeichnis node_modules .


Strategie
Bildquelle: https://freeiconshop.com/icon/bulb-icon-flat/Wenn ein Software-Projekt weiter gegeben wird, möchte man natürlich, das es einfach zu installieren ist, und Out of the Box läuft.
Damit dies so ist, müssen alle Pakete lokal installiert werden, die die Software benötigt um lauffähig zu sein.


Was ist mit globaler Installation?

Wann ist denn dann bitte eine globale Installation von Paketen sinnvoll?
Auch dafür gibt es Anwendungsfälle, auf die wir durch unsere zuvor gefasste Strategie kommen...

... in Projekten die wir mit anderen teilen, möchten wir natürlich aufgeblähte Projektverzeichnisse - und somit unnötige Pakete in der Struktur - vermeiden.
Wir können davon ausgehen, das jemand der node betreibt npm bereits installiert hat, somit würden wir also npm nicht als lokale Abhängigkeit hinzufügen. 


KLAR?!? 
Ok, aber auch sämtliche Pakete die ähnliche Funktionalität haben, würde dies einschließen. Beispielsweise den alternativen Package-Manager yarn 
Würden wir yarn lokal installieren, würde unser Projektverzeichnis von jetzt auf gleich um satte
36 MB anwachsen.

Erstaunlicherweise verbleiben selbst nach einer unmittelbaren Deinstallation eines lokal installierten yarn noch 4 MB Zusatzdaten im node_modules Verzeichnis. 
Wenn jemand weiß, wie das zustande kommt, hinterlasst hier gerne einen Kommentar.

TIPP:Um solche Altlasten wieder loszuwerden kannst du einfach das node_modules Verzeichnis löschen, und via npm install neu befüllen.

CLI-Pakete

Schau man sich im NPM-Repositorie ein wenig um, findet man schnell Pakete, die als Namensbestandteil cli besitzen : gulp-cli oder angular-ci

Viele dieser Pakete stellen kleine Helferlein für den Terminal (Konsole) dar. So ist gulp-cli eine Vereinfachung um Gulp aus jedem Verzeichnis auf dem Rechner aufrufen zu können, obwohl das Paket gulp nur lokal im Projekt installiert wurde.

ACHTUNG... nur weil cli Bestandteil des Namens ist, bedeutet dies nicht, das es so ein Helferlein ist. Daher gilt es genau die Funktion und den Kontext des Moduls zu studieren um eine durchdachte Entscheidung treffen zu können, ob man es besser global, oder lokal installiert.




Previous
Next Post »

Dieses Blog durchsuchen