Para ampliar la respuesta de @Steve Roberts.
Mi nombre de usuario tiene la forma "dominio \ nombre de usuario", incluida la barra oblicua en la configuración del proxy que resultó en una barra diagonal. Entonces entrando en esto:
npm config set proxy "http://domain\username:password@servername:port/"
También tuve que codificar mi domain\user
cadena en URL , sin embargo, tengo un espacio dentro de mi nombre de usuario, así que puse un +
para codificar la codificación de la URL del espacio, pero se codificó doble como %2B
(que es la codificación de URL para el signo más, sin embargo, la URL codificar para un espacio es%20
), así que tuve que hacer lo siguiente:
comando npm
// option one
// it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x: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:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
// option two (B) as of 2019-06-01
// no DOMAIN
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://user name:password@x.x.x.x:port"
npm config set proxy "http://user name:password@x.x.x.x:port"
solución de problemas de configuración npm
Utilicé el npm config list
para obtener los valores analizados que había establecido anteriormente, y así es como descubrí la codificación doble. Extraño.
Esencialmente, debe resolver los siguientes requisitos:
- ¿Se
DOMAIN
requiere una cadena para la autenticación?
- ¿Necesitas codificar caracteres especiales?
- Los espacios y los signos (@) son especialmente desafiantes
Saludos.
VARIABLES DE ENTORNO DE WINDOWS (Aviso CMD)
Actualizar
Resulta que incluso con las configuraciones anteriores, todavía tuve algunos problemas con algunos paquetes / scripts que usan Solicitud - Cliente HTTP simplificado internamente para descargar cosas. Entonces, como se explica en el archivo Léame anterior, podemos especificar variables de entorno para establecer el proxy en la línea de comando, y Request respetará esos valores.
Luego, después (y soy reacio a admitir esto) varios intentos (más como días), de tratar de establecer las variables de entorno, finalmente logré las siguientes pautas:
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:password@x.x.x.x:port
SET HTTPS_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
cntlm
Utilicé la técnica anterior durante algunas semanas, hasta que me di cuenta de la sobrecarga de actualizar mi contraseña en todas las herramientas que necesitaban la configuración del proxy.
Además de npm, también uso:
- cenador
- vagabundo
- caja virtual (ejecutando Linux)
- apt-get [linux]
- git
- vscode
- soportes
- átomo
- tsd
Pasos de configuración de cntlm
Entonces, instalé cntlm . La configuración cntlm
es bastante sencilla, busca el archivo ini @C:\Program Files\Cntlm\cntlm.ini
- Abierto
C:\Program Files\Cntlm\cntlm.ini
(puede que necesite derechos de administrador)
- buscar
Username
y Domain
líneas (línea 8-9 creo)
- agrega tu nombre de usuario
- agrega tu dominio
En cmd prompt run:
cd C:\Program Files\Cntlm\
cntlm -M
cntlm -H
- se le pedirá la contraseña:
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:
El resultado que obtenga cntlm -H
se verá más o menos así:
PassLM 561DF6AF15D5A5ADG
PassNT A1D651A5F15DFA5AD
PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN'
- Se recomienda que use PassNTLMv2, así que agregue una
#
línea anterior PassLM
y PassNT
no los use
- Pega el resultado de
cntlm -H
la ini reemplazar las líneas para PassLM
, PassNT
y PassNTMLv2
, o comentar las líneas originales y añadir la suya.
- Agrega tus
Proxy
servidores. Si no sabe qué es el servidor proxy ... Haga lo que hice, busqué mi archivo de configuración automática de proxy buscando la AutoConfigURL
clave del Registro enHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
. Navegue a esa URL y mire a través del código que resulta ser JavaScript.
- Opcionalmente, puede cambiar el puerto donde escucha cntlm cambiando la
Listen ####
línea, donde ####
está el número de puerto.
Configurar NPM con cntlm
Entonces, apuntas npm a tu proxy cntml, puedes usar la ip, yo usé localhost
y el puerto predeterminado para cntlm 3128
para que mi url proxy se vea así
http://localhost:3128
Con el comando adecuado:
npm config set proxy http: // localhost: 3128
Es mucho más simple Configura todas sus herramientas con la misma URL y solo actualiza la contraseña en un lugar. La vida es mucho más simple, no.
Debe configurar el certificado npm CA
De la documentación npm ca
Si su proxy corporativo está interceptando conexiones https con su propio certificado autofirmado, esto es imprescindible para evitar npm config set strict-ssl false
(gran no-no).
Pasos básicos
- Obtenga el certificado de su navegador (Chromes funciona bien). Exportarlo como Base-64 codificado X.509 (.CER)
- Reemplazar nuevas líneas con
\n
- Edite su
.npmrc
agregar una líneaca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Cuestiones
He notado que a veces npm se cuelga, así que detengo (a veces con fuerza) cntlm y lo reinicio.