C'è un modo per fare in modo che npm install (il comando) funzioni dietro al proxy?


266

Leggi informazioni su una variabile proxy in un .npmrcfile ma non funziona. Cercare di evitare il download manuale di tutti i pacchetti e l'installazione necessari.

Risposte:


343

Ho risolto questo problema in questo modo:

  1. Eseguo questo comando:

    npm config set strict-ssl false
  2. Quindi impostare npm per l'esecuzione con http, anziché https:

    npm config set registry "http://registry.npmjs.org/"
  3. Quindi installo i pacchetti usando questa sintassi:

    npm --proxy http://username:password@cacheaddress.com.br:80 install packagename

Salta la username:passwordparte se il proxy non richiede l'autenticazione

EDIT: Un mio amico ha appena sottolineato che potresti far funzionare NPM dietro un proxy impostando ENTRAMBI le variabili di ambiente HTTP_PROXY e HTTPS_PROXY, quindi emettendo normalmente il comando npm install express (ad esempio)

EDIT2: Come ha commentato @BStruthers, tieni presente che le password contenenti "@" non verranno analizzate correttamente, se contiene @ inserisci l'intera password tra virgolette


7
Attenzione, se la tua password contiene "@" npm non analizzerà correttamente l'impostazione del proxy. Una possibile soluzione alternativa è inserire un nome utente fasullo: password nella configurazione di npm e utilizzare un proxy locale (come il violinista) per modificare l'intestazione di autorizzazione proxy della richiesta per avere il nome utente corretto: password. Tenere presente che il nome utente: password memorizzata in Proxy-Authorization è codificato in base64.
BStruthers,

14
Se la tua password contiene un simbolo @, puoi passare inserendo il tuo nome utente e la password tra virgolette.
absynthe minded web fabbro

9
Puoi avere caratteri speciali nella tua password, ma devono essere codificati in url. Quindi, se la tua password era my@password, il tuo file .npmrc dovrebbe avere my%40passwordper la parte della password. Metterlo tra virgolette funziona in alcuni casi, ma codificarlo è infallibile.
Chris Jaynes,

1
Un altro gotcha! Se hai precedentemente impostato le variabili di sistema HTTP-PROXY assicurati di cancellarle!
Sydwell,

1
Leggenda! Avevo rinunciato a cercare di far funzionare npm al lavoro, ma alla fine questo l'ha risolto.
tamj0rd2,

308

npmProxy di installazione

Per HTTP:

npm config set proxy http://proxy_host:port

Per HTTPS:

usa l'indirizzo proxy https se ce n'è uno

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

altrimenti riutilizzare l'indirizzo proxy http

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

Nota : il proxy https non ha httpscome protocollo, ma http.


9
Nessun supporto SOCKS?
grm

57
Si noti che il proxy https non ha "https" come protocollo, ma "http". La modifica di questo ha risolto il problema per me.
peterhil,

3
@peterhil Grazie per il suggerimento. È pazzesco ma ho impiegato ore a risolverlo con "https". Qualche idea sul perché funzioni così?
Manoj NV

2
@ManojNV, la connessione al server proxy non è crittografata. Non sta parlando HTTPS con il server proxy, solo HTTP. Il payload è SSL tra il client e il server di destinazione. Se fosse HTTPS sul server proxy, le cose verrebbero crittografate / decrittografate due volte.
Jamie,

1
Delicato. Grazie mille @peterhil
Alec Breton

104

In caso di dubbi, prova tutti questi comandi, come faccio io:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false
set HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
set HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export http_proxy=http://myusername:mypassword@proxy.us.somecompany:8080

npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 \
--without-ssl --insecure -g install

=======

AGGIORNARE

Metti le tue impostazioni in ~/.bashrco ~/.bash_profilecosì non devi preoccuparti delle tue impostazioni ogni volta che apri una nuova finestra del terminale!

Se la tua azienda è come la mia, devo cambiare la mia password abbastanza spesso. Quindi ho aggiunto quanto segue nel mio ~ / .bashrc o ~ / .bash_profile in modo che ogni volta che apro un terminale, so che il mio npm è aggiornato!

  1. Basta incollare il seguente codice nella parte inferiore del ~/.bashrcfile:

    ######################
    # User Variables (Edit These!)
    ######################
    username="myusername"
    password="mypassword"
    proxy="mycompany:8080"
    
    ######################
    # Environement Variables
    # (npm does use these variables, and they are vital to lots of applications)
    ######################
    export HTTPS_PROXY="http://$username:$password@$proxy"
    export HTTP_PROXY="http://$username:$password@$proxy"
    export http_proxy="http://$username:$password@$proxy"
    export https_proxy="http://$username:$password@$proxy"
    export all_proxy="http://$username:$password@$proxy"
    export ftp_proxy="http://$username:$password@$proxy"
    export dns_proxy="http://$username:$password@$proxy"
    export rsync_proxy="http://$username:$password@$proxy"
    export no_proxy="127.0.0.10/8, localhost, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16"
    
    ######################
    # npm Settings
    ######################
    npm config set registry http://registry.npmjs.org/
    npm config set proxy "http://$username:$password@$proxy"
    npm config set https-proxy "http://$username:$password@$proxy"
    npm config set strict-ssl false
    echo "registry=http://registry.npmjs.org/" > ~/.npmrc
    echo "proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "strict-ssl=false" >> ~/.npmrc
    echo "http-proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "http_proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "https_proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "https-proxy=http://$username:$password@$proxy" >> ~/.npmrc
    
    ######################
    # WGET SETTINGS
    # (Bonus Settings! Not required for npm to work, but needed for lots of other programs)
    ######################
    echo "https_proxy = http://$username:$password@$proxy/" > ~/.wgetrc
    echo "http_proxy = http://$username:$password@$proxy/" >> ~/.wgetrc
    echo "ftp_proxy = http://$username:$password@$proxy/" >> ~/.wgetrc
    echo "use_proxy = on" >> ~/.wgetrc
    
    ######################
    # CURL SETTINGS
    # (Bonus Settings! Not required for npm to work, but needed for lots of other programs)
    ######################
    echo "proxy=http://$username:$password@$proxy" > ~/.curlrc
  2. Quindi modifica i campi "nome utente", "password" e "proxy" nel codice incollato.

  3. Apri un nuovo terminale

  4. Controlla le tue impostazioni eseguendo npm config listecat ~/.npmrc

  5. Prova a installare il tuo modulo usando

    • npm install __, o
    • npm --without-ssl --insecure install __, o
    • sovrascrivere le impostazioni del proxy utilizzando npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __.
    • Se si desidera che il modulo sia disponibile a livello globale, aggiungere un'opzione -g

3
L'ultimo comando ha funzionato per me. Tutti quelli precedenti fallirono
foecum

3
ho letto circa 50 risposte relative a questa configurazione proxy in corso ... l'unica cosa che ha funzionato è stata la tua risposta ... grazie !!!
Lorenzo,

4
Grazie ragazzi!! Sono contento che funzioni! Questo è stato un grosso mal di testa al lavoro, quindi sono contento di poter aiutare gli altri: P
Katie,

2
+1. Questo funziona Ho usato Comandi- npm config set registry http://registry.npmjs.org/, npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080, npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080, npm config set strict-ssl falseper la configurazione e NPM pacchetto NPM quindi installato utilizzando npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 --without-ssl --insecure -g install {packagename}. Grazie
Atur,

1
Dopo tre giorni di tentativi questa soluzione ha funzionato per me.
Mohan Singh,

33

Hai provato le opzioni della riga di comando invece del .npmrcfile?

Penso che qualcosa di simile abbia npm --proxy http://proxy-server:8080/ install {package-name}funzionato per me.

Ho visto anche quanto segue: npm config set proxy http://proxy-server:8080/


+1 ho provato gli altri questo era quello che ha funzionato per me. con la parte autentica di Renato Gama
winner_joiner

20

Sebbene ci siano già molti buoni consigli, per il mio ambiente (Windows 7, usando PowerShell) e l'ultima versione disponibile di node.js (v8.1.2) tutto quanto sopra non ha funzionato, tranne quando ho seguito le impostazioni di brunowego .

Quindi controlla le tue impostazioni con:

npm config list

Impostazioni dietro un proxy:

npm config set registry http://registry.npmjs.org/
npm config set http-proxy http://username:password@ip:port
npm config set https-proxy http://username:password@ip:port
npm config set proxy http://username:password@ip:port
npm set strict-ssl false

Spero che questo farà risparmiare tempo a qualcuno


come trovo il mio indirizzo proxy?
Robin,

@Robin In un modo, se si utilizza Windows, IE li memorizza. Puoi andare su IE e visualizzare le impostazioni LAN sotto connessione, e lo mostrerà lì.
eaglei22,

@Robin ovviamente dipende dal browser, ma di solito si trova nelle impostazioni
Carmine Tambascia,

@Robin nei browser sotto impostazione dovresti vedere / controllare l'impostazione del proxy. Di solito c'è un file con .pac dove l'ultimo like dovrebbe essere: PROXY YourProxyAdress: PORT
Carmine Tambascia

17

Questo funziona per me in Windows:

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

Se non si è in alcun dominio, utilizzare:

npm config set proxy http://user:pass@host:port

Se la password contiene caratteri speciali come ", @, :e così via, li sostituisce con i loro valori URL codificato. Ad esempio "-> %22, @-> %40, :-> %3A. %5Cè usato per il personaggio \.


6
Grazie per il consiglio, questo ha funzionato per me. Puoi aprire la tua console javascript con ctrl + shift + j e digitare encodeURIComponent("YourP@ssword")per ottenere la versione codificata della tua password.
jaggedsoft,

15

Per impostare il proxy http , impostare il flag -g :

sudo npm config set proxy http://proxy_host:port -g

Per il proxy https, assicurati di nuovo che il flag -g sia impostato:

sudo npm config set https-proxy http://proxy_host:port -g


qual è il significato di -g?
David,

1
lo imposta a livello globale, non per l'installazione locale
Andrei,

8
$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port

1
Aggiungi alcuni commenti per favore.
Max

8

Questo ha funzionato per me-

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
npm set strict-ssl=false

7

vim ~/.npmrcnella tua macchina Linux e aggiungi quanto segue. Non dimenticare di aggiungere una registryparte poiché ciò causa errori in molti casi.

proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/

2
Molti proxy supportano il tunneling delle richieste https, ma non gestiranno una connessione https con se stessi. Pertanto, quando si verificano problemi, provare a modificare https-proxy=https://..inhttps-proxy=http://..
YoYo

7

Finalmente sono riuscito a risolvere questo problema essendo dietro proxy con autenticazione AD. Ho dovuto eseguire:

npm config set proxy http://domain%5Cuser:password@proxy:port/
npm config set https-proxy http://domain%5Cuser:password@proxy:port/

È molto importante codificare gli URL con caratteri speciali come backshlash o # Nel mio caso ho dovuto codificare

  1. backshlashcon% 5C così domain\user willsiadomain%5Cuser
  2. #firmare con una %23%0Apassword come Password#2saràPassword%23%0A2

Ho anche aggiunto le seguenti impostazioni:

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


6

Ho provato tutte queste opzioni, ma il mio proxy non ne aveva nessuna per qualche motivo. Quindi, nato per disperazione / disperazione, ho provato curla caso nella mia shell Git Bash, e ha funzionato.

Deselezionando tutte le opzioni proxy usando

npm config rm proxy
npm config rm https-proxy

E poi correre npm installnella mia shell Git Bash ha funzionato perfettamente. Non so come sia impostato correttamente per il proxy e il cmdprompt di Windows non lo è, ma ha funzionato.


6
npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/

Questo ha risolto il mio problema.


La cosa cruciale era cambiare il collegamento al registro: invece di https avevo prima il collegamento http.
Alex Fainshtein,

6

Dopo aver collegato finalmente diverse risposte, le prime quattro righe delle risposte di @Kayvar mi aiutano a risolvere il problema:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false


5

Prova a trovare .npmrc in C: \ Users \ .npmrc

quindi apri (blocco note), scrivi e salva all'interno:

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

PS: rimuovi "<" e ">" per favore !!


5

Per me, anche se Python ecc funzionerà, anche se il nostro proxy aziendale npm non lo farebbe.

Provai

npm config set proxy http://proxyccc.xxx.ca:8080 npm config set https-proxy https://proxyccc.xxx.ca:8080 npm config set registry http://registry.npmjs.org/

come indicato ma continuava a ricevere lo stesso errore.

È stato solo quando ho rimosso https-proxy https://proxyccc.xxx.ca:8080 dal file .npmrc che npm install electron --save-dev ha funzionato


1
Il tuo https-proxynon è probabilmente https:. Almeno, avere la stessa porta per ognuno probabilmente non è corretto, ma penso che entrambi abbiano probabilmente lo stesso valore.
toddkaufmann,

5

Su sistema Windows

Prova a rimuovere le impostazioni del proxy e del registro (se già impostate) e imposta le variabili di ambiente sulla riga di comando tramite

SET HTTP_PROXY=http://username:password@domain:port
SET HTTPS_PROXY=http://username:password@domain:port

quindi provare a eseguire npm install. In questo modo, non imposterai il proxy in .npmrc ma per quella sessione funzionerà.


Questo ha funzionato per me. Il simbolo uguale è ciò che sembrava far funzionare tutto. Prima stavo solo usando SET HTTP_PROXY http://username:password@domain:portma il passaggio a SET HTTP_PROXY=http://username:password@domain:portsembrava che tutto funzionasse
Dib

4

Utilizzare il comando seguente in cmd o GIT Bash o altri prompt

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

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

dove 192.168.1.101 è proxy ip e 4128 è porta. cambiare in base alle impostazioni del proxy. funziona per me.


1
Ho dovuto usare un dominio per l'autenticazione e ho usato il back-slash di escape: con questa stringa% 5C. Alla fine ha funzionato!
Francesco,

4

Molte applicazioni (ad es. Npm) possono utilizzare le impostazioni proxy dalle variabili di ambiente dell'utente.

Puoi semplicemente aggiungere al tuo ambiente seguendo le variabili HTTP_PROXY e HTTPS_PROXY che avranno lo stesso valore per ognuna

http: // utente: password @ proxyAddress: proxyPort

Ad esempio se hai Windows puoi aggiungere proxy come segue:

Come appare su Windows


4

Nel mio caso, ho dimenticato di impostare "http: //" nei miei file di configurazione (si trovano negli indirizzi proxy C: \ Users \ [USERNAME] \ .npmrc). Quindi invece di avere

proxy=http://[IPADDRESS]:[PORTNUMBER]
https-proxy=http://[IPADDRESS]:[PORTNUMBER]

avevo

proxy=[IPADDRESS]:[PORTNUMBER]
https-proxy=[IPADDRESS]:[PORTNUMBER]

Il che ovviamente non ha funzionato, ma i messaggi di errore non sono stati di grande aiuto ...


4

Ci sono state molte risposte sopra per questa domanda, ma nessuna di quelle ha funzionato per me. Tutti citati per aggiungere il http://prefisso. Quindi l'ho aggiunto anch'io. Tutto fallito.

Funziona finalmente dopo che ho rimosso accidentalmente il http://prefisso. La configurazione finale è così:

npm config set registry http://registry.npmjs.org/
npm config set http-proxy ip:port
npm config set https-proxy ip:port
npm config set proxy ip:port
npm set strict-ssl false

Non conosco la logica dietro questo, ma ha funzionato. Se nessuna delle risposte precedenti funziona per te, forse puoi provare in questo modo. Spero che questo sia utile.


4

Ci sono buone informazioni sulla pagina di curl su SSL e problemi di certificato . Baso gran parte della mia risposta sulle informazioni lì.

L'uso di strict-ssl false è una cattiva pratica e può creare problemi. Quello che possiamo fare invece è aggiungere il certificato che viene iniettato, dal certificato "man in the middle".

Come risolverlo su Windows:

  1. Scarica i certificati CA da curl base al pacchetto CA di Mozilla. Puoi anche usare lo shellscript "firefox-db2pem.sh" di curl per convertire il tuo database Firefox locale.
  2. Vai a una pagina Web utilizzando https, ad esempio StackOverflow in Chrome o Internet Explorer
  3. Fai clic sull'icona a forma di lucchetto, fai clic su Visualizza certificati o "Valido" in Chrome
  4. Passare al percorso di certificazione. Il certificato principale o il certificato radice è quello che vogliamo estrarre. Fai clic su quel certificato e poi "visualizza certificato"
  5. Fai clic sulla seconda scheda, "Dettagli". Fai clic su "Copia su file". Scegli il formato DER e prendi nota di dove salvi il file. Scegli un nome file adatto, come rootcert.cer
  6. Se hai installato Git, avrai openssl.exe. Altrimenti, installa git per Windows in questa fase. Molto probabilmente l'eseguibile di openssl sarà in C: \ Programmi \ git \ usr \ bin \ openssl.exe. Useremo openssl per convertire il file nel formato PEM di cui NPM ha bisogno per capirlo.
  7. Convertire il file salvato nel passaggio 5 utilizzando questo comando:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    dove rootcert è il nome file del certificato salvato nel passaggio 5.
  8. Apri outcert.pem in un editor di testo abbastanza intelligente da comprendere le terminazioni di riga, quindi non il blocco note. Seleziona tutto il testo e copialo negli appunti.
  9. Ora incolleremo quel contenuto alla fine del bundle CA Cert creato nel passaggio 1. Quindi apri cacert.pem nel tuo texteditor avanzato. Vai alla fine del file e incolla il contenuto dal passaggio precedente alla fine del file. (Mantieni la riga vuota sotto ciò che hai appena incollato)
  10. Copia il cabundle.pem salvato in un posto adatto. Ad esempio il tuo% userprofile% o ~. Prendi nota della posizione del file.
  11. Ora diremo a npm / yarn di usare il nuovo bundle. In una riga di comando, scrivi
    npm config set cafile **C:\Users\username\cacert.pem
    dove C: \ Users \ nomeutente \ cacert.pem è il percorso dal passaggio 10.
  12. Facoltativamente: attiva di nuovo strict-ssl, npm config set strict-ssl true

Accidenti! Ce l'abbiamo fatta! Ora npm può capire come connettersi. Il bonus è che puoi dire a curl di usare lo stesso cabundle.pem e capirà anche gli HTTP.


3

Ecco i passaggi che ho seguito (Windows):

  1. Modifica il seguente file C:\Users\<WIN_USERNAME>\.npmrc
  2. Esporta il certificato nel tuo file system dal seguente indirizzo: https://registry.npmjs.org

  3. Passare al percorso del certificato esportato ed emettere il seguente comando:

    npm config set cafile npm_certificate.cer

  4. Aggiungi le seguenti modifiche al file: registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer

Ora dovresti essere pronto per partire!


2

Il mio problema è derivato da un errore sciocco da parte mia. Dato che un giorno avevo rapidamente lasciato cadere i miei proxy in un file Windows * .bat (http_proxy, https_proxy e ftp_proxy), ho dimenticato di sfuggire ai caratteri speciali per il dominio \ user (% 5C) con codifica URL e la password con il punto interrogativo '?' (% 3F). Vale a dire, una volta che hai il comando codificato, non dimenticare di sfuggire a '%' nel comando file bat.

Ho cambiato

set http_proxy=http://domain%5Cuser:password%3F@myproxy:8080

per

set http_proxy=http://domain%%5Cuser:password%%3F@myproxy:8080

Forse è un caso limite, ma si spera che aiuti qualcuno.


1

quando do senza prefisso http / http nelle impostazioni proxy npm fallito anche quando l'host proxy e la porta erano valori corretti. Ha funzionato solo dopo aver aggiunto il prefisso del protocollo.


0

Basta aprire il nuovo terminale e digitare npm config edite npm config -g edit. Ripristina impostazioni predefinite. Dopo quel terminale vicino, apri quello nuovo e digita npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>se hai bisogno a livello globale basta aggiungere -g.

Ha funzionato per me, spero che funzionerà per te :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.