/ Node.js

Proxy Settings für npm, Angular CLI, ...

Wie setzt man den Proxy für npm, ng in der PowerShell.
Muss man wirklich in allen diesen config Files der einzelnen Tools die Proxy Definitionen ablegen? - Nein, es geht inzwischen einfacher.

Kroete

Problem

Im Artikel: Npm, bower, git und Proxy ging ich schon mal auf die Problematik ein, dass man für jedes Tool im zugehörigen config file den Proxy setzen muss. Falls man sich hinter einem Proxy befindet, natürlich nur. Dies ist vor allem in Firmennetzen üblich und macht einem das Leben als Web Entwickler schwer.

Inzwischen sind zwar die Fehlermeldungen oft schon hilfreich (proxy settings required, oder so), aber manchmal kommt eben nur eine Timeout oder Access Denied Meldung.

Eine weitere Erleichterung brachte auch, dass meist nicht mehr so viele Tools im Spiel sind, wie noch vor zwei Jahren.
Doch einige hat man nach wie vor, z.B.

  • npm (Node.Js Package Manager)
  • ng (Angular-Cli)

Typische Aufrufe:

Aber auch die Tools selbst haben sich verbessert und können meist mit der Umgebungsvariable HTTP_PROXY arbeiten.

Lösung

Folgende Befehle verwende ich jetzt gerne.
In der PowerShell Konsole - auch innerhalb Visual Studio Code (VS Code), kopiere ich mir folgende Zeilen rein :

$proxy = "http://domainname%5Cusername:password@proxyserver:proxyport"
$env:HTTP_PROXY = $proxy
$env:HTTPS_PROXY = $proxy
$env:PROXY = $proxy
$env:ALL_PROXY = $proxy
$env:FTP_PROXY = $proxy

Die erste Zeile muss man natürlich anpassen: domainname, username, password, Proxyserver, proxyport

Bemerkungen

1. Sonderzeichen

Wie im Artikel: Npm, bower, git und Proxy gezeigt, müssen auch hier die Sonderzeichen URL encoded werden:

Beispiel:

mydomain\myusername ->mydomain%5Cmyusername
P@ss?word1 -> P%40ss%3Fword1

$proxy = "http://mydomain%5Cmyusername:P%40ss%3Fword1@proxy.mydomain.lan:8080"
2. Kopieren in die Shell:

Das Kopieren ist im Zusammenhang mit der Eingabeaufforderung oder PowerShell manchmal eine Herausforderung: in die Zwischenablage mit Strg+c und dann in der PowerShell dann Strg+v oder auch nur ein Rechtsklick mit der Maus - falls QuickEdit Mode in den Einstellungen aktiviert ist.):

3. Config files

Diese Methode hat für mich den Vorteil, dass nicht mehr unverschlüsselt das Passwort in den Config Files im Home Verzeichnis steht (die wenigsten Tools verschlüsseln die Passwörter).

4. Warum so viele Umgebungsvariablen

Reicht nicht $HTTP_PROXY? - Nein, leider nicht, wobei die ersten zwei Variablen am wichtigsten sind: $HTTP_PROXY und $HTTPS_PROXY.

5. Permanent setzen in der Systemsteuerung?

Warum die Umgebungsvariablen nicht in der Systemsteuerung permanent setzen?

Damit sieht man das Setting (das Passwort!) in jeder Eingabeaufforderung bzw. PowerShell, wenn man die Umgebungsvariablen auflistet (set bzw. Get-ChildItem env:).

Wenn man will, kann man natürlich.
Einfach in der Systemsteuerung nach Umgebung oder Environment suchen. (Eigentlich reicht auch die Windows Taste drücken und Umgebung einzutippen.
Der hierarchische Weg wäre: Systemsteuerung\System und Sicherheit\System -Erweiterte Systemeinstellungen - Umgebungsvariablen...)

6. Eingabeaufforderung statt PowerShell
set HTTP_PROXY=http://domainname%5Cusername:password@proxyserver:proxyport
set HTTPS_PROXY=%HTTP_PROXY%
set PROXY=%HTTP_PROXY%
set ALL_PROXY=%HTTP_PROXY%
set FTP_PROXY=%HTTP_PROXY%

Artikel in diesem Blog


Weitere Let's Code Artikel.