· 3 min read
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.
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:
- npm install -g typescript
- git clone https://github.com/FranzHelm/starter-typescript2.git
- ng new uc.app1 —routing —style sass
- ionic start uc.app2 —template sidemenu
- yo @microsoft/sharepoint
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%
Links
Artikel in diesem Blog
Weitere Let’s Code Artikel.