it-swarm.com.de

Verwenden von npm hinter dem Firmenproxy .pac

Ich muss mehrere Pakete über npm herunterladen, aber unsere Proxy-Konfiguration ist eine .pac-Datei (ich bin unter Windows)

Ich habe es schon probiert

npm config set proxy http://mydomain\username:[email protected]:8181/proxy.pac
npm config set https-proxy http://mydomain\username:[email protected]:8181/proxy.pac

oder

npm config set proxy http://1.2.3.4:8181/proxy.pac
npm config set https-proxy http://1.2.3.4:8181/proxy.pac

aber es geht nicht ...

irgendein Vorschlag? Vielen Dank

125
Doc

Ich hatte gerade ein sehr ähnliches Problem, bei dem ich npm nicht dazu bringen konnte, hinter unserem Proxy-Server zu arbeiten.

Mein Benutzername hat die Form "Domäne\Benutzername" - einschließlich des Schrägstrichs in der Proxy-Konfiguration wurde ein Schrägstrich angezeigt. Also hier eingeben:

npm config set proxy "http://domain\username:[email protected]:port/"

beim Ausführen dieses Befehls npm config get proxy wird Folgendes ausgegeben: http: // Domäne/Benutzername: Kennwort @ Servername: Port/

Um das Problem zu beheben, habe ich stattdessen den Backslash mit einer URL codiert, also Folgendes eingegeben:

npm config set proxy "http://domain%5Cusername:[email protected]:port/"

und damit war der Proxy-Zugriff behoben.

165
Steve Roberts

Suchen Sie nach den URLs der pac-Datei in den Internet Explorer-LAN-Einstellungen und laden Sie die pac-Datei von der konfigurierten URL herunter .. _ Die pac-Datei ist nur eine Javascript-Datei mit einer Funktion namens FindProxyForURL, die verschiedene Proxy-Hosts in verschiedenen Szenarien zurückgibt.

Versuchen Sie, einen Host in dieser pac-Datei zu finden, von dem Sie denken, dass er für den allgemeinen Web-Verkehr gedacht ist, und schließen Sie ihn in .npmrc in C:\Users\<username>\.npmrc an. 

proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

Auch wenn Sie sich möglicherweise mit Ihrer Domäne und Ihrem Benutzernamen auf Ihrem Unternehmenscomputer anmelden, Möglicherweise ist der Active Directory-Domänenname des Benutzers nicht für den Proxy erforderlich , nur der Benutzername und das Kennwort (die sich möglicherweise von Ihrem Active-Server unterscheiden.) Verzeichnis anmelden)

Vergessen Sie nicht, mit speziellen Kennwörtern zu umgehen.

52
Ovidiu Buligan

Laden Sie Ihre .pac-Datei herunter . Öffnen Sie sie in einem beliebigen Editor und suchen Sie nach PROXY = "PROXY X.X.X.X:80;. Möglicherweise haben Sie viele Proxies, kopieren Sie einen dieser und führen Sie die folgenden Terminalbefehle aus:

npm config set proxy http://X.X.X.X:80
npm config set https-proxy http://X.X.X.X:80

Jetzt sollten Sie jedes Paket installieren können!

41
Sumeet_Pol

Ich habe dieses Problem so gelöst:

1) Ich führe diesen Befehl aus:

npm config set strict-ssl false

2) Stellen Sie npm so ein, dass es mit http anstelle von https ausgeführt wird:

npm config set registry "http://registry.npmjs.org/"

3) Dann installieren Sie Ihr Paket 

npm install <package name>

34
KARTHIKEYAN.A

Um die Antwort von @Steve Roberts zu erweitern. 

Mein Benutzername hat die Form "Domäne\Benutzername" - einschließlich des Schrägstrichs in In der Proxy-Konfiguration wurde ein Schrägstrich angezeigt. So hier eingeben:

npm config set proxy "http://domain\username:[email protected]:port/"

Ich musste auch meine domain\user-Zeichenfolge mit einer URL kodieren. Ich habe jedoch ein Leerzeichen in meinem Benutzernamen, also gebe ich einen + ein, um die Leerzeichen-URL-Kodierung zu kodieren. Diese würde jedoch doppelt als %2B kodiert werden (dies ist die URL-Kodierung für das Pluszeichen, Die URL-Kodierung für ein Leerzeichen lautet jedoch %20). Daher musste ich stattdessen Folgendes tun:

npm Befehl

//option one 
//it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:[email protected]:port"
npm config set proxy "http://DOMAIN%5Cuser+name:[email protected]:port"

//option two
//it works best for me
//please notice that I actually used a space 
//instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://DOMAIN%5Cuser name:[email protected]:port"
npm config set proxy "http://DOMAIN%5Cuser name:[email protected]:port"

fehlerbehebung bei npm config

Ich habe den npm config list verwendet, um die geparsten Werte zu erhalten, die ich oben gesetzt hatte, und so habe ich die doppelte Kodierung herausgefunden. Seltsam.

Grüße.

WINDOWS-UMGEBUNGSVARIABLEN (CMD-Eingabeaufforderung)

Aktualisieren

Es stellte sich heraus, dass ich selbst bei den obigen Konfigurationen immer noch Probleme mit einigen Paketen/Skripts hatte, die Request - Simplified HTTP-Client verwenden, um Sachen herunterzuladen. Wie in der obigen Readme-Datei erläutert, können wir environment variables angeben, um den Proxy in der Befehlszeile festzulegen, und Request wird diese Werte berücksichtigen. 

Dann, nach (und ich bin ungern zugeben, dass)mehrere Versuche (eher Tage), um die Umgebungsvariablen zu setzen, gelang es mir schließlich, die folgenden Richtlinien zu erfüllen:

rem notice that the value after the = has no quotations
rem    - I believe that if quotations are placed after it, they become
rem    part of the value, you do not want that
rem notice that there is no space before or after the = sign
rem     - if you leave a space before it, you will be declaring a variable 
rem     name that includes such space, you do not want to do that
rem     - if you leave a space after it, you will be including the space
rem     as part of the value, you do not want that either
rem looks like there is no need to URL encode stuff in there
SET HTTP_PROXY=http://DOMAIN\user name:[email protected]:port
SET HTTPS_PROXY=http://DOMAIN\user name:[email protected]:port

cntlm

Ich habe die obige Technik für ein paar Wochen verwendet, bis ich den Aufwand für die Aktualisierung meines Kennworts bei allen Tools erkannte, die das Proxy-Setup benötigten.

Neben npm verwende ich auch:

  • laube
  • landstreicher
    • virtuelle Box (läuft Linux)
    • apt-get [Linux]
  • git
  • vscode
  • klammern
  • atom
  • tsd

cntlm-einrichtungsschritte

Also habe ich cntlm installiert. Die Einstellung von cntlm ist ziemlich weit, Sie suchen nach der Ini-Datei @ C:\Program Files\Cntlm\cntlm.ini.

  1. Öffnen Sie C:\Program Files\Cntlm\cntlm.ini (Sie benötigen möglicherweise Administratorrechte)
  2. suchen Sie nach Username und Domain Zeilen (Zeile 8-9 denke ich)
    • füge deinen Benutzernamen hinzu
    • fügen Sie Ihre Domain hinzu
  3. Bei der Cmd-Eingabeaufforderung: 

    cd C:\Program Files\Cntlm\
    cntlm -M
    cntlm -H  
    
    • sie werden nach dem Passwort gefragt:
     cygwin warning:
       MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini
       Preferred POSIX equivalent is: /Cntlm/cntlm.ini
       CYGWIN environment variable option "nodosfilewarning" turns off this warning.
       Consult the user's guide for more details about POSIX paths:
         http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
     Password:
    
  4. Die Ausgabe von cntlm -H sieht etwa so aus:

    PassLM          561DF6AF15D5A5ADG  
    PassNT          A1D651A5F15DFA5AD  
    PassNTLMv2      A1D65F1A65D1ASD51  # Only for user 'user name', domain 'DOMAIN'
    
    • Es wird empfohlen, PassNTLMv2 zu verwenden, also vor der PassLM und PassNT einen # hinzuzufügen oder sie nicht zu verwenden
  5. Fügen Sie die Ausgabe aus cntlm -H in die ini-Datei ein, und ersetzen Sie dabei die Zeilen für PassLM, PassNT und PassNTMLv2, oder kommentieren Sie die ursprünglichen Zeilen und fügen Sie Ihre eigenen hinzu.
  6. Fügen Sie Ihre Proxy-Server hinzu. Wenn Sie nicht wissen, was der Proxy-Server ist ... Tun Sie, was ich getan habe, habe ich nach der Proxy-Autokonfigurationsdatei gesucht, indem Sie in HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings nach dem Registrierungsschlüssel AutoConfigURL gesucht haben. Navigiere zu dieser URL und schaue durch den Code, der zufällig JavaScript ist. 
  7. Optional können Sie den Port ändern, auf den cntlm wartet, indem Sie die Zeile Listen #### ändern, wobei #### die Portnummer ist.

NPM mit cntlm einrichten

Sie zeigen also npm auf Ihren cntml-Proxy. Sie können die IP-Adresse verwenden. Ich habe localhost und den Standardport für cntlm 3128 verwendet

http://localhost:3128

Mit dem richtigen Befehl:

npm config set proxy http: // localhost: 3128

Ist viel einfacher Sie richten alle Ihre Tools mit derselben URL ein und aktualisieren das Kennwort nur an einer Stelle. Das Leben ist so viel einfacher nicht.

Muss das npm CA-Zertifikat einrichten

Aus der npm-Dokumentation ca

Wenn Ihr Unternehmens-Proxy https-Verbindungen mit einem eigenen selbstsignierten Zertifikat abfängt, müssen Sie dies vermeiden npm config set strict-ssl false (großes nein-nein).

Grundlagen

  1. Holen Sie sich das Zertifikat von Ihrem Browser (Chromes funktioniert gut). Exportieren Sie es als Base-64-codiertes X.509 (.CER)}
  2. Neue Zeilen durch \n ersetzen
  3. Bearbeiten Sie Ihren .npmrc eine Zeile ca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

Probleme

Ich habe bemerkt, dass manchmal npm hängen bleibt, also halte ich (manchmal gewaltsam) cntlm an und starte es neu.

19
Aaron C

Ich hatte einige Probleme mit diesem Thema und schließlich habe ich folgendes getan:

  1. Verwendeter Fiddler, wenn "Automatisch authentifizieren" ausgewählt ist 
  2. In den Fiddler-Custom-Regeln fügte ich hinzu 

    if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";}
    
  3. Schließlich habe ich in npm den Proxy auf http: // localhost: 8888 gesetzt.

Das hat gut funktioniert.

6
Shoel Palli

Sie können Fiddler überprüfen, ob der Authentifizierungsfehler von NPM ausgegeben wird. Es ist einfach zu installieren und zu konfigurieren. Setzen Sie die Fiddler-Regel auf Automatisch authentifiziert. In .npmrc legen Sie diese Eigenschaften fest

registry=http://registry.npmjs.org
proxy=http://127.0.0.1:8888
https-proxy=http://127.0.0.1:8888
http-proxy=http://127.0.0.1:8888
strict-ssl=false

Es hat für mich funktioniert :)

4
Rakesh Sharma

Für alle, die Probleme mit einer Unternehmensfirewall haben, sowie mit SSL-Problemen (das lokale Ausstellerzertifikat kann nicht abgerufen werden), können Sie die folgenden Schritte ausführen:

Vergessen Sie SSL

Wenn Sie sich nicht mit SSL beschäftigen, können Sie den Ratschlägen vieler früherer Mitwirkender folgen, indem Sie Ihre Stellvertreter festlegen und die Registrierung in die nicht sichere Version ändern:

npm config set proxy http://username:[email protected]:port
npm config set https-proxy http://username:[email protected]:port
npm config set registry http://registry.npmjs.org/

Ein kurzes "gotcha" hier, meine Proxy-Zugangsdaten sind für gesicherte und nicht gesicherte Anforderungen gleich (beachten Sie, dass ich mein Protokoll als http: // für die https-proxy -Konfiguration hinterließ). Dies kann für Sie dasselbe sein und auch nicht.

Ich möchte SSL behalten

Wenn Sie SSL beibehalten möchten und strict-ssl=false nicht verwenden möchten, müssen Sie noch mehr Arbeit erledigen. Für mich stehe ich hinter einer Unternehmensfirewall und wir verwenden selbstsignierte Zertifikate. Daher erhalte ich den Fehler unable to get local issuer certificate. Wenn Sie sich im selben Boot befinden wie ich, müssen Sie die Option cafile= in der npm-Konfigurationsdatei festlegen. Zunächst müssen Sie eine PEM-Datei erstellen, die Informationen zu Ihren selbstsignierten Zertifikaten enthält. Wenn Sie nicht wissen, wie das geht, finden Sie hier Anweisungen für eine Windows-Umgebung ohne die Verwendung von Drittanbieter-Software:

Wir müssen explizit angeben, welchen Zertifikaten vertraut werden soll, da wir selbstsignierende Zertifikate verwenden. In meinem Beispiel habe ich mit Chrome zu www.google.com navigiert, um die Zertifikate zu erhalten.

Gehen Sie in Chrome zu Inspect -> Security -> Certificate anzeigen. Sie sehen alle Zertifikate, die die SSL-Verbindung zulassen. Beachten Sie, wie diese Zertifikate selbstsigniert sind. Der verschwommene Teil ist mein Unternehmen, und wir sind keine zertifizierte Behörde. Sie können den vollständigen Zertifikatpfad als P7B-Datei exportieren, oder Sie können die Zertifikate einzeln als CER-Dateien exportieren (base64-Kodierung). Wenn Sie den vollständigen Pfad als P7B exportieren, ist dies nicht besonders hilfreich, da Sie diese Datei in einem Zertifikatsmanager öffnen und ohnehin als einzelne CER-Dateien exportieren müssen. Wenn Sie in Windows auf die P7B-Datei doppelklicken, wird die Anwendung Certificate Manager geöffnet.

 enter image description here

Beim Export als CER (Base 64) handelt es sich eigentlich um eine Textdatei im folgenden Format:

-----BEGIN CERTIFICATE-----
MIIGqzCCBZOgAwIBAgITIwAAABWhFPjwukYhTAADAAAAFTANBgkqhkiG9w0BAQUF
ADBFMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGaXJ2aW5n
b0pvCkNmjWzaNNUg2hYET+pP5nP75aRu+kPRl9UnlQ....rest of certificate...
-----END CERTIFICATE-----

Um unsere PEM-Datei zu erstellen, müssen wir diese Zertifikate einfach in einer einzigen Datei übereinander stapeln und die Erweiterung in .pem ändern. Ich habe den Notizblock dazu benutzt.

Sie stapeln die Zertifikate in umgekehrter Reihenfolge aus dem Zertifikatpfad. Ich würde also oben mit * .google.com beginnen, dann Websense darunter einfügen, CA 1 ausstellen usw. Auf diese Weise werden die Zertifikate von oben nach unten analysiert und nach der entsprechenden Stammzertifizierungsstelle gesucht. Das einfache Einfügen der Stammzertifizierungsstelle funktioniert nicht, aber wir müssen auch nicht alle Zertifikate hinzufügen. Über den obigen Pfad muss ich nur die Zertifikate einbeziehen, die vor dem Websense-Zertifikat (ausstellende CA 1, Richtlinien-CA, Stamm-CA) liegen.

Sobald diese selbstsignierten Zertifikate in einer PEM-Datei gespeichert sind, können wir npm anweisen, diese Zertifikate als vertrauenswürdige Zertifizierungsstelle zu verwenden. Legen Sie einfach die Konfigurationsdatei fest und Sie sollten sich auf den Weg machen:

npm config set cafile "C:\yourcerts.pem"

Jetzt, da Ihre Proxys (http und https) und die Registrierung auf https://registry.npmjs.org eingestellt sind, sollten Sie Pakete hinter einer Unternehmensfirewall mit selbstsignierten Zertifikaten installieren können, ohne die strict-ssl-Einstellung zu ändern.

4
John Galt

Versuchen Sie Folgendes: Setzen Sie den Proxy in npm wie folgt

npm config set proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set https-proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"
3
Mohammed Safeer

Verwenden Sie den folgenden Befehl bei cmd oder GIT Bash oder einer anderen Eingabeaufforderung

$ npm config set proxy "http://192.168.1.101:4128"

$ npm config set https-proxy "http://192.168.1.101:4128"

dabei ist 192.168.1.101 Proxy-IP und 4128 Port. Ändern Sie entsprechend Ihren Proxy-Einstellungen.

2
Pankaj

Wenn Sie sich hinter einem Unternehmensnetzwerk mit Proxy befinden, habe ich nur ein NTLM-Proxy-Tool verwendet und den von NTLM bereitgestellten Port und Proxy verwendet. 

strict-ssl=false
proxy=http://localhost:3125

Ich hoffe das hilft.

Sie erhalten den Proxy-Host und -Port von Ihrem Serveradministrator oder Support.

Danach eingerichtet

npm config set http_proxy http://username:[email protected]:itsport
npm config set proxy http://username:[email protected]:itsport

Wenn ein Sonderzeichen im Kennwort vorhanden ist, versuchen Sie es mit% urlencode. ZB: - Pfund (Hash) sollte durch% 23 ersetzt werden.

Das hat für mich funktioniert ...

2
Shamseer

Sie müssen "npm config set http-proxy " verwenden. 

benutzen:

npm config set http-proxy http://1.2.3.4:8181
npm config set https-proxy http://1.2.3.4:8181
2

Versuchen Sie dies, es war das einzige, was für mich funktioniert hat:

npm --proxy http: //: @proxyhost: --https-proxy http: //: @proxyhost: --strict-ssl Falsches Installationspaket

Beachten Sie die Option --strict-ssl false

Viel Glück.

1

Erstellen Sie einfach eine Datei mit dem Namen .npmrc in einem Projektordner. Dadurch werden Proxy-Einstellungen auf Systemebene vermieden

#Without password
proxy=http://ipaddress:80
https-proxy=http://ipaddress:80

#With password
proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

Kommentar wie folgt, wenn Sie den Proxy nicht verwenden

#proxy=http://ipaddress:80
#https-proxy=http://ipaddress:80

#With password
#proxy=http://<username>:<pass>@proxyhost:<port>
#https-proxy=http://<uname>:<pass>@proxyhost:<port>
1

Das in der akzeptierten Antwort erwähnte Proxy-Setup NPM löst das Problem. Wie Sie jedoch in this npm issue sehen können, verwenden einige Abhängigkeiten GIT, wodurch das Proxy-Setup git ausgeführt wird benötigt und kann wie folgt durchgeführt werden:

git config --global http.proxy http://username:[email protected]:port
git config --global https.proxy http://username:[email protected]:port

Das NPM-Proxy-Setup erwähnte:

npm config set proxy "http://username:[email protected]:port"
npm config set https-proxy "http://username:[email protected]:port"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"
1
Josiel Faleiros

Da ich immer noch Probleme mit der Einstellung von Proxy-Einstellungen bei der Arbeit und dem Deaktivieren zu Hause habe, habe ich npm-corpo-proxy.sh als Skript erstellt und veröffentlicht. In jeder corpo muss das Passwort häufig geändert werden und muss spezielle Zeichen enthalten, die vor der Eingabe von npm config (dasselbe für die Backash-Form Domäne\Benutzer) eingegeben werden müssen.

0
Maciek Leks

Ich konnte es nicht mit dem CNTLM zum Laufen bringen. Ich habe versucht, alle oben genannten Informationen zu befolgen, aber der Proxy hat die Verbindung immer noch nicht autorisiert. Bei Fiddler müssen Sie es nur installieren und die Option Automatisch authentifiziert aktivieren. Aber um zu funktionieren, musste ich die .npmrc-Datei aus meinem Benutzerordner entfernen und die Umgebungsvariablen wie hier angegeben setzen mit folgenden Werten:

set npm_config_https-proxy="http://127.0.0.1:8888"

set npm_config_registry="http://registry.npmjs.org/"
0

Ich stieß auf ein ähnliches Problem und fand heraus, dass meine npm-Konfigurationsdatei (.npmrc) einen falschen Registrierungseintrag hat. kommentierte es aus und lief erneut npm install. es funktionierte.

0

Das Hinzufügen der folgenden Zeilen in der .typingsrc-Datei hat mir geholfen.

{
    "rejectUnauthorized": false,
    "registryURL" :"http://api.typings.org/"
 }
0

Ich hatte ein ähnliches Problem und habe alle oben genannten Abhilfemaßnahmen ausprobiert, aber keine davon funktionierte für mich (ich verwendete Sonderzeichen (wie das @ -Zeichen) in meinem Passwort und musste auch einen Domänennamen hinzufügen.

Abgesehen davon war ich etwas besorgt, mein Passwort als Klartext hinzuzufügen. Es stellte sich heraus, dass die einfachste Lösung zur Bewältigung all dieser Herausforderungen die Verwendung einer Art Reverse-Proxy (wie Fiddler) war.

Die Konfigurationsschritte habe ich bereits in this answer in SO beschrieben.

0
Karthik

Nach einer kleinen Suche bei Google war dies das erste, was ich ausprobierte

npm config set registry http://registry.npmjs.org/
npm config set proxy "your proxy"
npm config set https-proxy "your proxy"

Trotzdem schien npm die Verbindung zu verlieren, als er versuchte, "npm install" zu machen. dann lief ich diese Zeile in Eingabeaufforderung und jetzt kann ich npm installieren 

set NODE_TLS_REJECT_UNAUTHORIZED=0
0
Barkin Kaplan

Betriebssystem: Windows 7

Schritte, die für mich gearbeitet haben: 

  1. npm config get proxy 
  2. npm config get https-proxy 

  3. Kommentare: Ich habe diesen Befehl ausgeführt, um meine Proxy-Einstellungen zu kennen
    npm config rm proxy 

  4. npm config rm https-proxy
  5. npm config set registry=http://registry.npmjs.org/
  6. npm install
0
Suchi Dvg

Bei der Arbeit verwenden wir ZScaler als Stellvertreter. Ich konnte npm nur mit Cntlm arbeiten, um zu arbeiten. 

Diese Antwort sehen:

NPM hinter NTLM-Proxy

0
bruceceng