Installationsprobleme

Alle Anleitungen, die Sie im Internet zu Node, NPM und weiteren Modulen finden, setzen eines voraus: transparenter Internet-Zugriff. Was auf den ersten Blick kaum eine Erwähnung wert ist, stellt für viele Benutzer in der Tat ein Problem dar. Nicht mangels Internet, sondern durch die Beschränkungen in Unternehmensnetzwerken.

Node.Js

Node selbst steht als Installationspaket zur Verfügung ist auch ohne Internet installierbar (wenn man es erstmal runtergeladen hat). Da hier NPM mit enthalten ist, geht das auch sehr gut offline.

Probleme mit NPM

npm kann möglicherweise nicht so auf das Internet zugreifen, wie Sie es erwarten. Das kann an lokalen Proxy-Servern liegen oder fehlender SSL-Unterstützung.

Proxy

Sie können npm anweisen, einen Proxy-Server zu benutzen:

npm config set proxy http://proxy.company.com:8080 -g
npm config set https-proxy http://proxy.company.com:8080 -g

Die Option -g stellt die Änderungen global ein. Ansonsten gilt es nur für das aktuelle Projekt und Sie müssen sich in einem Ordner befinden, wo eine Datei .npmrc existiert. Ist diese nicht vorhanden, wird sie angelegt, was unter Umständen sinnlos ist, wenn Sie später weitere npm-Kommandos dort nicht ausführen.

Falls ein Benutzernamen und Kennwort erforderlich ist, sieht das folgendermaßen aus:

npm config set proxy http://domain%5Cuser:pass@host:port

Sonderzeichen müssen hier URL-Encoded werden:

  • “ -> %22
  • @ -> %40
  • : -> %3A
  • \ -> %5C

Die Einstellungen für den Proxy gelten, wenn sie global erfolgen, für das Roaming-Profil des aktuellen Windows-Benutzers. Läuft Visual Studio unter einem anderen Konto und werden die Werkzeuge später aus Visual Studio heraus benutzt (also nicht nur die Kommandzeile), dann kann es passieren, dass die Proxy-Einstellungen nicht greifen. Alternativ ist es möglich, die Proxy-Einstellungen als Umgebungsvariable http-proxy festzulegen, was quasi superglobal ist.

SSL

Standardmäßig ist der Zugriff auf das Repository durch SSL geschützt. Umgehen Sie das wie folgt:

npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"

Unter Umständen kann die Kombination mit dem Installationsvorgang helfen:

npm --proxy http://:@:
    --without-ssl 
    --insecure 
    -g install 

Probleme mit Git

Git wird benötigt, wenn Sie Pakete via Bower oder über direkte Verbindungen von Github abholen. Dabei gibt es zwei Hürden in Unternehmensnetzwerken:

  • Ein lokaler Proxy wird benutzt
  • Das Protokoll git:// wird blockiert

Viele Administratoren sind der Meinung, das HTTP und Port 80 bzw. 443 ausreichen. Entwickler wollen und brauchen aber mehr. Also muss Git entsprechend konfiguriert werden.

Die lokale Git-Installation erhalten Sie unter Linux wie folgt:

$ sudo apt-get install git

Unter Windows sollten Sie einen Installer benutzen, der auch eine Shell mitbringt, die einen Teil der Funktionen der *nix-Umgebung enthält. Man muss dann nicht so oft gedanklich umschalten und kann die meisten Linux-Befehle unverändert ausführen.

Hier finden Sie das passende Paket: https://git-scm.com/download/win

Stellen Sie die Optionen wie auf den folgenden Bildschirmbildern gezeigt ein.

Git1
Git2
Git3

Lassen Sie alle anderen Optionen unverändert.

Die Installation für Windows umfassend keine grafische Oberfläche. Diese muss separat besorgt werden. Auf lange Sicht sind die Kommandozeilenbefehle aber der bessere, weil schnellere Weg.

Proxy

Um einen Proxy zu nutzen, geben Sie folgendes Kommando ein (in einer Zeile):

git config 
    --global 
    http.proxy 
    http://:@:

Ersetzen Sie die Platzhalten durch die passenden Werte. <proxyuser> und <proxypwd> sind nur notwendig, wenn der Proxy eine Authentifizierung erfordert. Die anderen Platzhalter bezeichnen den Proxy-Server und den Port selbst.

Git-Protokoll

Mit dem folgenden Kommando (wieder in einer Zeile) wird auf https umgeschaltet:

git config 
    --global 
    url."https://@".insteadOf git://

Der Platzhalter <username> bezeichnet den Namen eines privaten Repositories auf Github. Die Anführungszeichen schützen den Namen im Fall von enthaltenen Leerzeichen.

Sie können für den globalen Zugriff den Wert komplett weglassen und stattdessen Github einsetzen:

git config 
    --global 
    url.https://github.com/.insteadOf git://

Bower

Falls Bower benutzt wird, muss der Proxy auch hier eingestellt werden. Dies ist unabhängig von Git. Dazu tragen Sie folgendes in die Datei .bowerrc ein (die ggf. zum diesem Zweck erzeugt werden muss):

{
  "proxy": "http://:",
  "https-proxy": "http://:"
}

Wenn die Datei nicht vorhanden ist, erstellen Sie sie. Falls sich der Windows-Explorer weigert, eine Datei ohne Namen anzulegen, benennen Sie sie anders und benutzen Sie dann das DOS-Kommando ren, um die Datei umzubenennen.

Offline Installation

Wenn auch die Angabe eines Proxies nicht ausreichend ist, bleibt nur der Offline-Zugriff. Der klassische Weg dabei besteht im Herunterladen eines Installationspakets und der lokalen Installation. Für Windows-Benutzer sind dies MSI-Pakete, für Linux-Benutzer geht es in der Regel über DEB-Pakete (Debian, Unbuntu, Mint usw.) oder RPM-Pakete (Suse, Fedora, RedHat usw).

NPM-Pakete dagegen sind keine solche Paketsammlungen, sondern lediglich Anweisungen über Quelle und Abhängigkeiten. Bei der Installation werden die spezifizierten Fragmente aus dem Internet heruntergeladen.

Vorbereitung

Grundsätzlich lässt sich die Abhängigkeit einer Internet-Verbindung nicht ganz vermeiden. Aber es reicht aus, eine „andere“ Maschine mit Internet-Zugang zu haben. Sie können einen Umweg nutzen. Das geht für eine einzelnes Paket ohnehin, aber viele Pakete haben Dutzende bis Hunderte Abhängigkeiten, manchmal über mehrere Stufen. Hier ist es sinnvoll, etwas Automatik zu haben.

Die Lösung ist das Paket npmbox. Es besteht aus zwei Kommandozeilenwerkzeugen, npmbox zum Herunterladen und Verpacken und npmunbox zum Auspacken. Wenn Sie kurzzeitigen Zugang zum Internet auf der Zielmaschine erhalten können, installieren Sie npmbox dort ebenfalls. Es vereinfacht den Umgang erheblich. Geht auch das nicht, finden Sie weiter unten eine Anleitung für Härtefälle.

Zuerst installieren Sie npmbox auf der Quellmaschine mit Internet-Zugang:

npm install npmbox -g

Um zu prüfen, dass das geklappt hat, geben Sie folgendes Kommando ein:

npmbox --help

Sie erhalten eine Kurzanleitung eines in der Tat sehr einfachen Werkzeugs.

Härtefälle

Damit Sie auf der Zielmaschine auf npmbox zugreifen können, müssen Sie dieses Paket selbst paketieren. Das ist eine Art rekursive Vorgehensweise — npmbox verpackt sich selbst:

npmbox npmbox

Das Ergebnis ist eine Datei mit der Dateierweiterung .npmbox.

Kopieren Sie die Datei auf die Zielmaschine. Das Paket ist ein sogenannter Tarball. npm kann mit Tar direkt umgehen und benötigt in der Regel keine weitere Software. Wenn Sie aber vorher etwas mit npmbox verpackt haben, benötigen Sie npmunbox zum Auspacken.

Zugriff auf Tar

Tarball

Tar ist eine Archivsoftware. Der Name stammt von „Tape Archive“ (Archivierung auf Bandlaufwerk). Um Daten auf Bändern zu speichern, hat man viele kleine Dateien zu einer großen Datei zusammengefasst. Im Gegensatz zu ZIP ist TAR eine reine Kombinationsmethode, die Dateien werden dabei nicht komprimiert. Das Format erhält die ursprünglichen Meta-Daten der Dateien wie Rechte und Link-Informationen. Sie finden mehr dazu auf Wikipedia:

https://en.wikipedia.org/wiki/Tar_(computing)

Unter Linux ist tar ein Standardwerkzeug, das immer zur Vefügung steht:

tar -xvf yourfile.tar

Unter Windows gibt es mehrere Optionen. Zu den Standardumgebungen, die in Node-Installationen benutzt werden, gehört auch Git. Git ist, wie anfangs beschrieben, auch als MSI verfügbar. Dieser Installer kommt mit einer rudimentären BASH-Shell. Die kann zwar nicht alles wie unter Linux, aber sie kann tar. Öffnen Sie die Bash-Shell unter Windows und nutzen Sie dann dasselbe Kommando:

$tar -xvf yourfile.tar

bashtarwin

Wenn das nicht passt, eignen sich auch die bekannten Archivprogramme wie 7-Zip.

NpmBox installieren

Nachdem das Kommando ausgeführt wurde, sind alle Dateien in einem Ordner .npmbox-cache.

Wenn Sie mehrere Pakete entpacken, werden diese alle in denselben Ordner kopiert. Das ist durchaus in Ordnung, weil es ja durch Abhängigkeiten Wiederholungen geben kann.

Nun ist wieder npm an der Reihe (in einer Zeile):

npm install --global 
            --cache ./.npmbox-cache 
            --optional 
            --cache-min 999999 
            --fetch-retries 0 
            --fetch-retry-factor 0 
            --fetch-retry-mintimeout 1 
            --fetch-retry-maxtimeout 2 
            npmbox

\ oder /

Unter Linux nutzen Sie bei Pfadangaben wie immer /. Unter Windows natürlich . Wenn Sie aber die Git-Bash unter Windows benutzen, dann geht auch hier . Eigentlich ein Grund cmd.exe zu meiden.

Die letzte Zeile enthält das eigentliche Paket. Die Option --cache sorgt dafür, das npm nicht auf das Repository, sondern auf den lokalen Ordner zugreift. Oft reicht eine Kurzversion:

npm i -cache ./.npmbox-cache npmbox

Pakete installieren

Nun ist dieses umständliche npm-Kommando nicht das, was Sie als Entwickler häufiger eintippen wollen. Deshalb gibt es npmunbox. Dies ist ein weiteres Kommandzeilenwerkzeug, das den Auspackvorgang vereinfacht.

npmunbox <paketname>

Als Paketname nutzen Sie den Namen, der auch beim verpacken eingesetzt wurde.

Wenn es Probleme gibt, stimmt oft die npmbox-Version auf Quell- und Zielmaschine nicht überein. Prüfen Sie das sorgfältig, bevor Sie weiter machen.

npmunbox hat ein paar mehr Optionen, da hier ein Teil des Verhaltens von npm simuliert werden muss:

  • -v, -verbose: Zeige npm-Ausgaben (Standard).
  • -s, -silent: Zusätzliche Ausgaben werden unterdrückt.
  • -g, -global: Pakete global installieren (im Pfad, nicht im Projektordner)..
  • -C, -prefix: Der Schalter npm --prefix gibt das Standardverzeichnis aus.
  • -S, -save: Der Schalter npm --save speichert in der package.json in dependencies.
  • -D, -save-dev: Der Schalter npm --save-dev speichert in der package.json in devDependencies.
  • -O, -save-optional: Der Schalter npm --save-optional speichert in der package.json in optionalDependencies.
  • -E, -save-exact: Der Schalter npm --save-exact führt dazu, das Versionen im SemVer-Format mit der exakten Nummer platziert werden.

Zusammenfassung aller Kommandos

Proxy für git einrichten

git config –global http.proxy http://proxy:8080
git config –global https.proxy http://proxy:8080

Proxy für npm entfernen

npm config rm proxy
npm config rm https-proxy

Proxy für git entfernen

git config –global –unset http.proxy
git config –global –unset https.proxy

Proxy für git und npm anzeigen

git config –global –list
npm config get list
npm config get proxy
npm config get https-proxy

Proxy für Windows einrichten

netsh winhttp set proxy proxy:3218

Proxy für Windows entfernen

netsh winhttp reset proxy

Proxy für git anzeigen

netsh winhttp show proxy

NPM, Bower & Co. – Umgang mit Corporate Proxy und Offline