¿Hay alguna manera de hacer que npm install (el comando) funcione detrás del proxy?

266

Lea acerca de una variable proxy en un .npmrcarchivo pero no funciona. Intentar evitar la descarga manual de todos los paquetes requeridos y la instalación.

Ben
fuente

Respuestas:

343

Resolví este problema de esta manera:

  1. Ejecuto este comando:

    npm config set strict-ssl false
  2. Luego configure npm para que se ejecute con http, en lugar de https:

    npm config set registry "http://registry.npmjs.org/"
  3. Luego instalo paquetes usando esta sintaxis:

    npm --proxy http://username:[email protected]:80 install packagename

Omita la username:passwordparte si el proxy no requiere que se autentique

EDITAR: Un amigo mío acaba de señalar que puede hacer que NPM funcione detrás de un proxy estableciendo AMBAS variables de entorno HTTP_PROXY y HTTPS_PROXY, y luego emitiendo normalmente el comando npm install express (por ejemplo)

EDIT2: Como comentó @BStruthers, tenga en cuenta que las contraseñas que contengan "@" no se analizarán correctamente, si contiene @ ponga la contraseña completa entre comillas

Renato Gama
fuente
77
Atención, si su contraseña contiene "@" npm no analizará su configuración de proxy correctamente. Una posible solución alternativa es poner un nombre de usuario falso: contraseña en la configuración de npm, y usar un proxy local (como fiddler) para modificar el encabezado de Autorización de Proxy de la solicitud para tener el nombre de usuario correcto: contraseña. Tenga en cuenta que el nombre de usuario: contraseña almacenada en Proxy-Authorization está codificada en base64.
BStruthers
14
Si su contraseña contiene un símbolo @, puede pasarla poniendo su nombre de usuario y contraseña entre comillas.
absynthe mind web smith
9
Puede tener caracteres especiales en su contraseña, pero deben estar codificados en URL. Entonces, si su contraseña era my@password, su archivo .npmrc debería tener my%40passwordpara la parte de contraseña. Ponerlo entre comillas funciona en algunos casos, pero codificarlo es infalible.
Chris Jaynes
1
Otro gotcha! Si ha configurado previamente las variables del sistema HTTP-PROXY, ¡ asegúrese de borrarlas !
Sydwell
1
Tu leyenda! Había dejado de intentar que npm trabajara en el trabajo, pero esto finalmente lo resolvió.
tamj0rd2
308

npmProxy de configuración

Para HTTP:

npm config set proxy http://proxy_host:port

Para HTTPS:

use la dirección de proxy https si hay una

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

de lo contrario, reutilice la dirección proxy HTTP

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

Nota : El https-proxy no tiene httpscomo protocolo, pero http.

jithesh
fuente
9
¿No hay soporte para SOCKS?
grm
57
Tenga en cuenta que el proxy https no tiene 'https' como protocolo, sino 'http'. Cambiar esto resolvió el problema para mí.
Peter
3
@peterhil Gracias por ese consejo. Es una locura, pero pasé horas resolviendo esto con "https". ¿Alguna idea de por qué funciona así?
Manoj NV
2
@ManojNV, la conexión al servidor proxy no está encriptada. No está hablando HTTPS al servidor proxy, solo HTTP. La carga útil es SSL entre el cliente y el servidor de destino. Si fuera HTTPS para el servidor proxy, entonces las cosas se cifrarían / ​​descifrarían dos veces.
Jamie
1
Sutil. Muchas gracias @peterhil
Alec Breton
104

En caso de duda, pruebe todos estos comandos, como lo hago yo:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:[email protected]:8080
npm config set https-proxy http://myusername:[email protected]:8080
npm config set strict-ssl false
set HTTPS_PROXY=http://myusername:[email protected]:8080
set HTTP_PROXY=http://myusername:[email protected]:8080
export HTTPS_PROXY=http://myusername:[email protected]:8080
export HTTP_PROXY=http://myusername:[email protected]:8080
export http_proxy=http://myusername:[email protected]:8080

npm --proxy http://myusername:[email protected]:8080 \
--without-ssl --insecure -g install

=======

ACTUALIZAR

¡Ponga su configuración en ~/.bashrco ~/.bash_profilepara que no tenga que preocuparse por su configuración cada vez que abra una nueva ventana de terminal!

Si su empresa es como la mía, tengo que cambiar mi contraseña con bastante frecuencia. Así que agregué lo siguiente en mi ~ / .bashrc o ~ / .bash_profile para que cada vez que abro una terminal, ¡sé que mi npm está actualizado!

  1. Simplemente pegue el siguiente código en la parte inferior de su ~/.bashrcarchivo:

    ######################
    # 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. Luego edite los campos "nombre de usuario", "contraseña" y "proxy" en el código que pegó.

  3. Abrir una nueva terminal

  4. Verifique su configuración ejecutando npm config listycat ~/.npmrc

  5. Intenta instalar tu módulo usando

    • npm install __o
    • npm --without-ssl --insecure install __o
    • anule su configuración de proxy mediante npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __.
    • Si desea que el módulo esté disponible globalmente, agregue la opción -g
Katie
fuente
3
El último comando funcionó para mí. Todos los anteriores fallaron
foecum
3
Leí alrededor de 50 respuestas sobre esta maldita configuración de proxy ... lo único que funcionó fue tu respuesta ... ¡¡¡Gracias !!!
Lorenzo
44
¡¡Gracias chicos!! Me alegro de que esté funcionando! Esto ha sido un gran dolor de cabeza en el trabajo, así que me alegro de poder ayudar a otros: P
Katie
2
+1. Esto funciona. Solía Comandos- npm config set registry http://registry.npmjs.org/, npm config set proxy http://myusername:[email protected]:8080, npm config set https-proxy http://myusername:[email protected]:8080, npm config set strict-ssl falsepara la configuración de la NGP y luego se instala el paquete usando NPM npm --proxy http://myusername:[email protected]:8080 --without-ssl --insecure -g install {packagename}. Gracias
Atur
1
Después de tres días de probar esta solución funcionó para mí.
Mohan Singh el
33

¿Has probado las opciones de línea de comandos en lugar del .npmrcarchivo?

Creo que algo así npm --proxy http://proxy-server:8080/ install {package-name}funcionó para mí.

También he visto lo siguiente: npm config set proxy http://proxy-server:8080/

Ben Humphreys
fuente
+1 probé los otros, este fue el que funcionó para mí. con la parte de autenticación de Renato Gama
winner_joiner
20

Aunque ya hay muchos buenos consejos, para mi entorno (Windows 7, usando PowerShell) y la última versión disponible de node.js (v8.1.2) todo lo anterior no funcionó, excepto cuando seguí la configuración de brunowego .

Así que verifique su configuración con:

npm config list

Configuraciones detrás de 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

Espero que esto le ahorre tiempo a alguien

Carmine Tambascia
fuente
¿Cómo encuentro mi dirección proxy?
Robin
@Robin Una forma, si usa Windows, IE las almacena. Puede ir a IE y ver la configuración de LAN en conexión, y se mostrará allí.
eaglei22
@Robin, por supuesto, depende del navegador, pero generalmente está bajo configuración
Carmine Tambascia
@Robin en los navegadores en la configuración, debería ver / verificar la configuración del proxy. Por lo general, hay un archivo con .pac donde debería ser el último: PROXY YourProxyAdress: PORT
Carmine Tambascia
17

Esto funciona para mí en Windows:

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

Si no está en ningún dominio, use:

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

Si su contraseña contiene caracteres especiales como ", @, :y así sucesivamente, reemplazarlos por sus valores de URL codificada. Por ejemplo "-> %22, @-> %40, :-> %3A. %5Cse usa para el personaje \.

maximus
fuente
66
Gracias por el consejo, esto funcionó para mí. Puede abrir su consola javascript con ctrl + shift + j y escribir encodeURIComponent("YourP@ssword")para obtener la versión codificada de su contraseña.
jaggedsoft
15

Para configurar el proxy http , establezca el indicador -g :

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

Para el proxy https, nuevamente asegúrese de que el indicador -g esté configurado:

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

Andrei
fuente
¿Cuál es el significado de -g?
David
1
lo configura globalmente, no para la instalación local
Andrei
8
$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port
Sharan Rajendran
fuente
1
Agrega algunos comentarios por favor.
Max
8

Esto funcionó para mí

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

vim ~/.npmrcen su máquina Linux y agregue lo siguiente. No olvide agregar una registryparte ya que esto puede causar fallas en muchos casos.

proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/
Abhishek Dwivedi
fuente
2
Muchos servidores proxy admiten solicitudes de túnel https, pero no manejarán una conexión https consigo mismos. Como tal, cuando se ejecuta en problemas, intente modificar https-proxy=https://..enhttps-proxy=http://..
Yoyo
7

Finalmente, he logrado resolver este problema detrás del proxy con autenticación AD. Tuve que ejecutar:

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

Es muy importante codificar en URL cualquier carácter especial como la barra diagonal inversa o # En mi caso, tuve que codificar

  1. backshlashcon% 5C así domain\user willseadomain%5Cuser
  2. #firmar con %23%0Acontraseña como Password#2seráPassword%23%0A2

También he agregado las siguientes configuraciones:

npm config set strict-ssl false
npm config set registry http://registry.npmjs.org/
Aleksander Billewicz
fuente
6

Aunque configuré proxy con config, el problema no se resolvió, pero después de que este funcionó para mí:

npm --https-proxy http://XX.AA.AA.BB:8080 instalar cordova-plugins

npm --proxy http://XX.AA.AA.BB:8080 instalar

Sreedhar GS
fuente
Este funciona para mí, no hay otro cambio. Abra la ventana de comandos y use lo anterior y funcionará
AKS
6

Probé todas estas opciones, pero mi proxy no tenía ninguna por alguna razón. Luego, nacido de la desesperación / desesperación, lo intenté al azar curlen mi caparazón de Git Bash, y funcionó.

Desarmar todas las opciones de proxy usando

npm config rm proxy
npm config rm https-proxy

Y luego correr npm installen mi shell Git Bash funcionó perfectamente. No sé cómo está configurado correctamente para el proxy y el cmdindicador de Windows no, pero funcionó.

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

Esto resolvió mi problema.

venugopal
fuente
Lo crucial fue cambiar el enlace al registro: en lugar de https que tenía antes, al enlace http.
Alex Fainshtein
6

Después de vincular diferentes respuestas finalmente, las primeras cuatro líneas de @Kayvar answers me ayudan a resolver el problema:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:[email protected]:8080
npm config set https-proxy http://myusername:[email protected]:8080
npm config set strict-ssl false
Muhammad Faizan Khan
fuente
5

Intenta encontrar .npmrc en C: \ Users \ .npmrc

luego abra (bloc de notas), escriba y guarde dentro:

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

PD: eliminar "<" y ">" por favor !!

Igor Beaufils
fuente
5

Para mí, aunque Python, etc., funcionará, aunque nuestro proxy corporativo npm no lo haría.

Lo intenté

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/

según las instrucciones pero seguía recibiendo el mismo error.

Sólo cuando me quité https-proxy https://proxyccc.xxx.ca:8080 del archivo .npmrc que la NGP instalar electrones --save-dev trabajó

Nick Flanagan
fuente
1
Tu https-proxyprobablemente no lo sea https:. Al menos, tener el mismo puerto para cada uno probablemente no sea correcto, pero creo que ambos probablemente tengan el mismo valor.
toddkaufmann
5

En el sistema de Windows

Intente eliminar la configuración del proxy y del registro (si ya está configurada) y configure las variables de entorno en la línea de comandos a través de

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

luego intente ejecutar npm install. Con esto, no configurará el proxy en .npmrc pero para esa sesión funcionará.

SoSufi
fuente
Esto funcionó para mí. El símbolo de igual es lo que parecía hacer que todo funcionara. Antes de eso solo estaba usando, SET HTTP_PROXY http://username:password@domain:portpero cambiar a SET HTTP_PROXY=http://username:password@domain:portparecía que todo funcionaba
Dib
4

Utilice el siguiente comando en cmd o GIT Bash u otro indicador

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

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

donde 192.168.1.101 es proxy ip y 4128 es puerto. cambiar de acuerdo a su configuración de proxy. Funciona para mí.

Pankaj
fuente
1
Pude usar un dominio para la autenticación, y usé la barra diagonal inversa con escape: con esta cadena% 5C. ¡Funcionó finalmente!
Francesco
4

Muchas aplicaciones (por ejemplo, npm) pueden usar la configuración de proxy de las variables de entorno del usuario.

Puede agregar a su entorno las siguientes variables HTTP_PROXY y HTTPS_PROXY que tendrán el mismo valor para cada una.

http: // usuario: contraseña @ proxy Dirección: proxyPort

Por ejemplo, si tiene Windows, puede agregar proxy de la siguiente manera:

Cómo se ve en Windows

Dmytro Melnychuk
fuente
4

En mi caso, olvidé establecer las direcciones proxy "http: //" en mis archivos de configuración (se pueden encontrar en C: \ Users \ [USERNAME] \ .npmrc). Entonces, en lugar de tener

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

yo tenía

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

Lo cual, por supuesto, no funcionó, pero los mensajes de error tampoco ayudaron mucho ...

Acroneos
fuente
4

Ha habido muchas respuestas anteriores para esta pregunta, pero ninguna de ellas funcionó para mí. Todos ellos mencionaron agregar un http://prefijo. Entonces lo agregué también. Todo falló.

Finalmente funciona después de que accidentalmente eliminé el http://prefijo. La configuración final es así:

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

No sé la lógica detrás de esto, pero funcionó. Si ninguna de las respuestas anteriores funciona para usted, tal vez pueda intentarlo de esta manera. Espero que este sea útil.

SkuraZZ
fuente
4

Hay buena información en la página de curl sobre SSL y problemas de certificados . Baso la mayor parte de mi respuesta en la información allí.

El uso de estruendo-ssl falso es una mala práctica y puede crear problemas. En cambio, lo que podemos hacer es agregar el certificado que se está inyectando, con el certificado "hombre en el medio".

Cómo resolver esto en Windows:

  1. Descargue los certificados de CA de curl basados ​​en el paquete de CA de Mozilla. También puede utilizar el shellscript "firefox-db2pem.sh" de curl para convertir su base de datos local de Firefox.
  2. Vaya a una página web usando https, por ejemplo Stackoverflow en Chrome o Internet Explorer
  3. Haga clic en el icono de candado, haga clic en Ver certificados o "Válido" en Chrome
  4. Navegue a la ruta de certificación. El certificado superior, o el certificado raíz, es el que queremos extraer. Haga clic en ese certificado y luego "ver certificado"
  5. Haga clic en la segunda pestaña, "Detalles". Haga clic en "Copiar a archivo". Elija el formato DER y tome nota de dónde guarda el archivo. Elija un nombre de archivo adecuado, como rootcert.cer
  6. Si tiene instalado Git, tendrá openssl.exe. De lo contrario, instale git para Windows en esta etapa. Lo más probable es que el ejecutable openssl esté en C: \ Archivos de programa \ git \ usr \ bin \ openssl.exe. Usaremos openssl para convertir el archivo al formato PEM que necesitamos para que NPM lo entienda.
  7. Convierta el archivo que guardó en el paso 5 utilizando este comando:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    donde rootcert es el nombre del archivo del certificado que guardó en el paso 5.
  8. Abra outcert.pem en un editor de texto lo suficientemente inteligente como para comprender los finales de línea, así que no el bloc de notas. Seleccione todo el texto y cópielo en el portapapeles.
  9. Ahora pegaremos ese contenido al final del paquete CA Cert realizado en el paso 1. Abra el archivo cacert.pem en su editor de texto avanzado. Vaya al final del archivo y pegue el contenido del paso anterior al final del archivo. (Preserve la línea vacía debajo de lo que acaba de pegar)
  10. Copie el cabundle.pem guardado en un lugar adecuado. Por ejemplo, su% userprofile% o ~. Tome nota de la ubicación del archivo.
  11. Ahora le diremos a npm / yarn que use el nuevo paquete. En una línea de comando, escriba
    npm config set cafile **C:\Users\username\cacert.pem
    donde C: \ Users \ username \ cacert.pem es la ruta del paso 10.
  12. Opcionalmente: encienda estrictamente-ssl nuevamente, npm config set strict-ssl true

¡Uf! ¡Lo hicimos! Ahora npm puede entender cómo conectarse. La ventaja es que puedes decirle a curl que use el mismo cabundle.pem y también entenderá HTTPs.

sur
fuente
3

Estos son los pasos que he seguido (Windows):

  1. Edite el siguiente archivo C:\Users\<WIN_USERNAME>\.npmrc
  2. Exporte el certificado a su sistema de archivos desde la siguiente dirección: https://registry.npmjs.org

  3. Navegue a la ubicación del certificado exportado y emita el siguiente comando:

    npm config set cafile npm_certificate.cer

  4. Agregue los siguientes cambios al archivo: registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer

¡Ahora deberías estar listo!

Marco
fuente
2

Mi problema se redujo a un error tonto de mi parte. Como un día había dejado caer mis servidores proxy en un archivo * .bat de Windows (http_proxy, https_proxy y ftp_proxy), olvidé escapar de los caracteres especiales para el dominio \ usuario codificado en URL (% 5C) y la contraseña con el signo de interrogación '?' (% 3F). Es decir, una vez que tenga el comando codificado, no olvide escapar del '%' en el comando del archivo bat.

Cambié

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

a

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

Tal vez sea un caso marginal, pero espero que ayude a alguien.

Brandon Søren Culley
fuente
1

cuando doy sin el prefijo http / http en la configuración del proxy, npm falló incluso cuando el host del proxy y el puerto eran valores correctos. Funcionó solo después de agregar el prefijo de protocolo.

Govind Avireddi
fuente
0

Simplemente abra la nueva terminal y escriba npm config edity npm config -g edit. Restablecer los valores predeterminados. Después de ese terminal cerrado, abra el nuevo y escriba npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>si necesita globalmente solo agregue -g.

Funcionó para mí, espero que funcione para ti :)

rufatZZ
fuente