Existe uma maneira de fazer o npm install (o comando) funcionar atrás do proxy?


266

Leia sobre uma variável de proxy em um .npmrcarquivo, mas ela não funciona. Tentando evitar o download manual, todos exigem pacotes e instalação.

Respostas:


343

Eu resolvi esse problema da seguinte maneira:

  1. Eu executo este comando:

    npm config set strict-ssl false
  2. Em seguida, defina npm para executar com http, em vez de https:

    npm config set registry "http://registry.npmjs.org/"
  3. Então eu instalo pacotes usando esta sintaxe:

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

Ignore a username:passwordparte se o proxy não exigir que você se autentique

EDIT: Um amigo meu acabou de referir que você pode obter NPM ao trabalho atrás de um proxy, definindo AMBOS HTTP_PROXY e https_proxy variáveis de ambiente, em seguida, emitir normalmente o comando npm instalar expressa (por exemplo)

EDIT2: Como o @BStruthers comentou, lembre-se de que as senhas que contêm "@" não serão analisadas corretamente, se contiver @, coloque a senha inteira entre aspas


7
Atenção, se sua senha contiver "@" npm não analisará sua configuração de proxy corretamente. Uma solução potencial é colocar um nome de usuário falso: senha na configuração do npm e usar um proxy local (como um violinista) para modificar o cabeçalho de Autorização de Proxy da solicitação para ter o nome de usuário correto: senha. Lembre-se de que o nome de usuário: a senha armazenada na Autorização de proxy é codificada em base64.
BStruthers

14
Se sua senha contiver um símbolo @, você poderá passá-la colocando seu nome de usuário e senha entre aspas.
absynthe web mente smith

9
Você pode ter caracteres especiais em sua senha, mas eles devem ser codificados por URL. Portanto, se sua senha era my@password, seu arquivo .npmrc deveria ter my%40passworda parte da senha. Colocá-lo entre aspas funciona em alguns casos, mas codificá-lo é infalível.
Chris Jaynes

1
Outra pegadinha! Se você já definiu as variáveis ​​de sistema anteriores HTTP-PROXY, limpe-as!
Sydwell 19/07/16

1
Você lenda! Eu tinha desistido de tentar fazer com que a NPM trabalhasse no trabalho, mas isso finalmente resolveu.
tamj0rd2

308

npmProxy de instalação

Para HTTP:

npm config set proxy http://proxy_host:port

Para HTTPS:

use o endereço de proxy https se houver um

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

caso contrário, reutilize o endereço de proxy http

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

Nota : O https-proxy não tem httpscomo protocolo, mas http.


9
Não há suporte para SOCKS?
GRM

57
Observe que o proxy https não tem 'https' como protocolo, mas 'http'. Mudar isso resolveu o problema para mim.
Peterhil

3
@ Peterhil Obrigado por essa dica. É uma loucura, mas passei horas para resolver isso com "https". Alguma idéia de por que funciona assim?
Manoj NV

2
@ManojNV, a conexão com o servidor proxy não está criptografada. Não está falando HTTPS para o servidor proxy, apenas HTTP. A carga útil é SSL entre o cliente e o servidor de destino. Se fosse HTTPS para o servidor proxy, as coisas seriam criptografadas / descriptografadas duas vezes.
Jamie

1
Sutil. Muito obrigado @peterhil
Alec Breton

104

Em caso de dúvida, tente todos esses comandos, como eu:

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

=======

ATUALIZAR

Coloque suas configurações em ~/.bashrcou ~/.bash_profilepara que você não precise se preocupar com as configurações sempre que abrir uma nova janela do terminal!

Se sua empresa é como a minha, preciso alterar minha senha com bastante frequência. Então eu adicionei o seguinte no meu ~ / .bashrc ou ~ / .bash_profile para que, sempre que abro um terminal, eu saiba que meu npm está atualizado!

  1. Basta colar o seguinte código na parte inferior do seu ~/.bashrcarquivo:

    ######################
    # 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. Em seguida, edite os campos "nome de usuário", "senha" e "proxy" no código que você colou.

  3. Abra um novo terminal

  4. Verifique suas configurações executando npm config listecat ~/.npmrc

  5. Tente instalar seu módulo usando

    • npm install __ou
    • npm --without-ssl --insecure install __ou
    • substitua suas configurações de proxy usando npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __.
    • Se você deseja que o módulo esteja disponível globalmente, adicione a opção -g

3
O último comando funcionou para mim. Todos os que falharam antes
foecum 02/02

3
eu li cerca de 50 respostas sobre essa configuração de proxy ***, a única que funcionou foi a sua resposta ... obrigado !!!
Lorenzo

4
Obrigado rapazes!! Que bom que está trabalhando! Esta tem sido uma dor de cabeça enorme no trabalho por isso estou feliz que eu possa ajudar os outros: P
Katie

2
+1. Isso funciona. Eu costumava commands- 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 falsepara a configuração do NPM e pacote de npm então instalado usando npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 --without-ssl --insecure -g install {packagename}. Obrigado
Atur

1
Após três dias de tentativas, esta solução funcionou para mim.
Mohan Singh

33

Você já tentou opções de linha de comando em vez do .npmrcarquivo?

Eu acho que algo como npm --proxy http://proxy-server:8080/ install {package-name}funcionou para mim.

Eu também vi o seguinte: npm config set proxy http://proxy-server:8080/


+1 eu tentei os outros, este foi o que funcionou para mim. com a parte de auth de Renato Gama
winner_joiner

20

Embora já existam muitos bons conselhos, para o meu ambiente (Windows 7, usando o PowerShell) e a última versão disponível do node.js (v8.1.2), todas as opções acima não funcionaram, exceto quando eu segui as configurações do brunowego .

Portanto, verifique suas configurações com:

npm config list

Configurações atrás de um 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 isso economize tempo para alguém


como localizo meu endereço de proxy?
Robin

@Robin De uma maneira, se estiver usando o Windows, o IE as armazena. Você pode acessar o IE e visualizar as configurações da LAN em conexão, e ele será exibido lá.
precisa saber é o seguinte

@Robin é claro depende do navegador, mas geralmente está sob configurações
Carmine Tambascia

@Robin nos navegadores na configuração, você deverá ver / verificar a configuração do proxy. Geralmente, há um arquivo com .pac em que o último deve ser: PROXY YourProxyAdress: PORT
Carmine Tambascia

17

Isso funciona para mim no Windows:

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

Se você não estiver em nenhum domínio, use:

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

Se a sua senha contém caracteres especiais, como ", @, :e assim por diante, substituí-los por seus valores de URL codificado. Por exemplo "-> %22, @-> %40, :-> %3A. %5Cé usado para o personagem \.


6
Obrigado pelo conselho, isso funcionou para mim. Você pode abrir seu console javascript com ctrl + shift + j e digitar encodeURIComponent("YourP@ssword")para obter a versão codificada da sua senha.
Jaggedsoft

15

Para configurar o proxy http, tenha o sinalizador -g definido:

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

Para proxy https, verifique novamente se o sinalizador -g está definido:

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


qual é o significado de -g?
David

1
define-se globalmente, e não para a instalação local
Andrei

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

1
Adicione alguns comentários, por favor.
Max

8

Isso funcionou para mim-

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 ~/.npmrcna sua máquina Linux e adicione o seguinte. Não se esqueça de adicionar registrypeças, pois isso causa falha em muitos casos.

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

2
Muitos proxies suportam solicitações https de encapsulamento, mas não tratam uma conexão https sozinhas. Como tal, ao encontrar problemas, tente modificar https-proxy=https://..para #https-proxy=http://..
YoYo 16/05

7

Finalmente, eu consegui resolver esse problema sendo um proxy atrás da autenticação do AD. Eu tive que executar:

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

É muito importante codificar por URL quaisquer caracteres especiais, como barra invertida ou # No meu caso, eu tive que codificar

  1. backshlashcom% 5C, então domain\user willsejadomain%5Cuser
  2. #assinar com %23%0Aa senha como Password#2seráPassword%23%0A2

Também adicionei as seguintes configurações:

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

6

Embora eu defina o proxy com a configuração, o problema não foi resolvido, mas após este funcionou para mim:

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

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


Este trabalho para mim, nenhuma outra mudança. Abra a janela de comando e uso acima e vai funcionar
AKS

6

Tentei todas essas opções, mas meu proxy não estava tendo nenhuma por algum motivo. Então, nascido do desespero / desespero, tentei aleatoriamente curlno meu shell Git Bash e funcionou.

Desativando todas as opções de proxy usando

npm config rm proxy
npm config rm https-proxy

E, em seguida, correr npm installno meu shell Git Bash funcionou perfeitamente. Não sei como ele está configurado corretamente para o proxy e o cmdprompt do Windows não, mas funcionou.


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

Isso resolveu meu problema.


O crucial foi alterar o link para o registro: em vez de https, eu tinha antes o link http.
Alex Fainshtein

6

Finalmente, depois de vincular respostas diferentes, as quatro primeiras linhas de @Kayvar answers me ajudam a resolver o 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

Tente encontrar .npmrc em C: \ Users \ .npmrc

depois abra (bloco de notas), escreva e salve dentro:

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

PS: remova "<" e ">" por favor !!


5

Para mim, embora o python etc funcione, o nosso proxy corporativo npm não funcionaria.

eu tentei

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/

conforme as instruções, mas continuava recebendo o mesmo erro.

Foi somente quando removi https-proxy https://proxyccc.xxx.ca:8080 do arquivo .npmrc que o npm install electron --save-dev funcionou


1
Você https-proxyprovavelmente não é https:. Pelo menos, ter a mesma porta para cada um provavelmente não está correto, mas acho que os dois provavelmente têm o mesmo valor.
precisa saber é o seguinte

5

No sistema Windows

Tente remover as configurações de proxy e registro (se já estiverem definidas) e defina variáveis ​​de ambiente na linha de comando via

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

tente executar a instalação do npm. Por isso, você não definirá o proxy em .npmrc, mas para essa sessão ele funcionará.


Isso funcionou para mim. O símbolo dos iguais é o que parecia fazer tudo funcionar. Antes que eu só estava usando SET HTTP_PROXY http://username:password@domain:port, mas a mudança para SET HTTP_PROXY=http://username:password@domain:portparecia ter tudo funcionando
Dib

4

Use o comando abaixo em cmd ou GIT Bash ou outro prompt

proxy do conjunto de configurações $ npm " http://192.168.1.101:4128 "

conjunto de configurações $ npm https-proxy " http://192.168.1.101:4128 "

onde 192.168.1.101 é proxy ip e 4128 é porta. altere de acordo com as suas configurações de proxy. funciona para mim.


1
Eu usei um domínio para autenticação e usei barra invertida: com essa string% 5C. Finalmente funcionou!
31517 Francesco

4

Muitos aplicativos (por exemplo, npm) podem usar a configuração de proxy de variáveis ​​de ambiente do usuário.

Você pode simplesmente adicionar ao seu ambiente as seguintes variáveis HTTP_PROXY e HTTPS_PROXY que terão o mesmo valor para cada uma

http: // usuário: senha @ proxyAddress: proxyPort

Por exemplo, se você possui o Windows, pode adicionar proxy da seguinte maneira:

Como fica no Windows


4

No meu caso, esqueci de definir o "http: //" nos meus arquivos de configuração (podem ser encontrados em C: \ Users \ [USERNAME] \ .npmrc) endereços de proxy. Então, ao invés de ter

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

eu tinha

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

O que, obviamente, não funcionou, mas as mensagens de erro também não ajudaram muito ...


4

Houve muitas respostas acima para esta pergunta, mas nenhuma delas funcionou para mim. Todos eles mencionados para adicionar http://prefixo. Então eu adicionei também. Tudo falhou.

Finalmente funciona depois que removi acidentalmente o http://prefixo. A configuração final é assim:

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

Não sei a lógica por trás disso, mas funcionou. Se nenhuma das respostas acima funcionar para você, talvez você possa tentar dessa maneira. Espero que este seja útil.


4

Há boas informações na página do curl sobre questões de SSL e certificado . Baseei a maior parte da minha resposta nas informações existentes.

O uso de strict-ssl false é uma prática ruim e pode criar problemas. O que podemos fazer é adicionar o certificado que está sendo injetado pelo certificado "man in the middle".

Como resolver isso no Windows:

  1. Faça o download dos Certificados de CA do curl com base no pacote de CA do Mozilla. Você também pode usar o shellscript "firefox-db2pem.sh" do curl para converter seu banco de dados local do Firefox.
  2. Vá para uma página da Web usando https, por exemplo Stackoverflow no Chrome ou Internet Explorer
  3. Clique no ícone de cadeado, clique em Ver certificados ou "Válido" no Chrome
  4. Navegue para o caminho da certificação. O certificado superior, ou o certificado raiz, é o que queremos extrair. Clique nesse certificado e, em seguida, "ver certificado"
  5. Clique na segunda guia, "Detalhes". Clique em "Copiar para arquivo". Escolha o formato DER e anote onde você salvou o arquivo. Escolha um nome de arquivo adequado, como rootcert.cer
  6. Se você tiver o Git instalado, terá o openssl.exe. Caso contrário, instale o git para windows nesse estágio. Provavelmente o executável openssl estará em C: \ Arquivos de Programas \ git \ usr \ bin \ openssl.exe. Usaremos o openssl para converter o arquivo no formato PEM necessário para que o NPM o entenda.
  7. Converta o arquivo que você salvou na etapa 5 usando este comando:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    onde rootcert é o nome do arquivo do certificado que você salvou na etapa 5.
  8. Abra o outcert.pem em um editor de texto inteligente o suficiente para entender as terminações de linha, portanto, não o bloco de notas. Selecione todo o texto e copie-o para a área de transferência.
  9. Agora, colaremos esse conteúdo no final do pacote CA Cert feito na etapa 1. Portanto, abra o cacert.pem no seu editor de texto avançado. Vá para o final do arquivo e cole o conteúdo da etapa anterior até o final do arquivo. (Preserve a linha vazia abaixo do que você acabou de colar)
  10. Copie o arquivo cabundle.pem salvo para um local adequado. Por exemplo, seu% userprofile% ou ~. Anote a localização do arquivo.
  11. Agora vamos dizer ao npm / yarn para usar o novo pacote. Em uma linha de comando, escreva
    npm config set cafile **C:\Users\username\cacert.pem
    onde C: \ Users \ nome de usuário \ cacert.pem é o caminho da etapa 10.
  12. Opcionalmente: ative o strict-ssl novamente, npm config set strict-ssl true

Ufa! Conseguimos! Agora o npm pode entender como se conectar. O bônus é que você pode dizer ao curl para usar o mesmo cabundle.pem e ele também entenderá HTTPs.


3

Aqui estão as etapas que eu segui (Windows):

  1. Edite o seguinte arquivo C:\Users\<WIN_USERNAME>\.npmrc
  2. Exporte o certificado para o seu sistema de arquivos do seguinte endereço: https://registry.npmjs.org

  3. Navegue para o local do certificado exportado e emita o seguinte comando:

    npm config set cafile npm_certificate.cer

  4. Adicione as seguintes alterações ao arquivo: registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer

Agora você deve estar pronto para ir!


2

Meu problema se resumiu a um erro bobo da minha parte. Como um dia, rapidamente, coloquei meus proxies em um arquivo windows * .bat (http_proxy, https_proxy e ftp_proxy), esqueci de escapar dos caracteres especiais do domínio \ usuário (% 5C) e senha codificados por URL com o ponto de interrogação '?' (% 3F). Ou seja, depois de ter o comando codificado, não esqueça de escapar do '%' no comando bat file.

eu mudei

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

para

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

Talvez seja um caso extremo, mas espero que ajude alguém.


1

quando eu dou sem prefixo http / http nas configurações de proxy, o npm falhou mesmo quando o host e a porta do proxy estavam com os valores corretos. Funcionou apenas após adicionar o prefixo do protocolo.


0

Basta abrir o novo terminal e digite npm config edite npm config -g edit. Redefinir para os padrões. Após esse terminal fechado, abra o novo e digite npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>se você precisar globalmente basta adicionar -g.

Funcionou para mim, espero que funcione para você :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.