Existe uma forma de fazer com que o npm instale (o comando) funcione por trás do 'proxy'?

Leia sobre uma variável 'proxy' num ficheiro .npmrc mas não funciona. Tentando evitar o Download manual de todos os pacotes necessários e instalação.

 205
Author: Ingo Karkat, 2011-09-26

25 answers

Resolvi este problema desta maneira.
  1. Eu comando este comando:

    npm config set strict-ssl false
    
  2. Então defina o MPN para correr com o http, em vez de https:

    npm config set registry "http://registry.npmjs.org/"
    
  3. Depois instalo pacotes usando esta sintaxe:

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

ignorar a parte username:password Se o 'proxy' não necessitar que você autentique

Editar: um amigo meu acabou de dizer que você pode conseguir que o NPM trabalhe atrás de um 'proxy', definindo ambos HTTP_ proxy e Variáveis de ambiente HTTPS_ proxy, depois emitindo normalmente o comando MPN install express (por exemplo)

EDIT2: como @BStruthers comentou, tenha em mente que as senhas que contêm " @ " não serão processadas correctamente

 269
Author: Renato Gama, 2014-08-03 19:54:21

Configuração npm proxy

Para HTTP:

npm config set proxy http://proxy_host:port

Para HTTPS:

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

Nota : o 'https-proxy' não tem https como protocolo, mas http.

 227
Author: j.i.t.h.e.s.h, 2015-03-27 14:12:23

Quando em dúvida, tente todos estes comandos, como eu faço:

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

Coloque as suas configurações em ~/.bashrc ou ~/.bash_profile para que não tenha de se preocupar com as suas configurações sempre que abrir uma nova janela de terminal!

Se a tua empresa é como a minha, tenho de mudar a minha senha muitas vezes. Então eu adicionei o seguinte na minha ~/.bashrc ou~/.bash_profile de modo que sempre que abro um terminal, sei que o meu MPN está a encontro!
  1. Basta colar o seguinte código no fundo do seu ficheiro ~/.bashrc:

    ######################
    # 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" username", "password" e "proxy" no código que colou.

  3. Abrir um novo terminal

  4. Verifique a sua configuração executando npm config list e cat ~/.npmrc

  5. Tente instalar o seu módulo usando

    • npm install __, ou
    • npm --without-ssl --insecure install __, ou
    • sobreponha a sua configuração do 'proxy' usando npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __.
    • Se quiser que o módulo esteja disponível globalmente, adicione a opção -g
 77
Author: Katie S, 2017-11-28 21:26:45

Já tentou as opções da linha de comandos em vez do ficheiro .npmrc?

Acho que algo como npm --proxy http://proxy-server:8080/ install {package-name} funcionou para mim. Também vi o seguinte:: npm config set proxy http://proxy-server:8080/
 29
Author: Ben Humphreys, 2011-09-27 07:59:58

Embora já existam muitos bons conselhos, para o meu ambiente(Windows 7, usando PowerShell) e a última versão disponível do node.js (v8.1.2 ) todos os elementos acima referidos não funcionaram, excepto quando segui brunowego.

Verifique a sua configuração com:

npm config list

Configuração por detrá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 isto poupe tempo a alguém.
 20
Author: Carmine Tambascia, 2017-11-20 16:20:36

Para configurar o 'proxy' de http tem a opção -G:

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

Para o 'proxy' do https, certifique-se novamente de que a bandeira -g está definida:

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

 15
Author: Andrei, 2015-07-13 11:21:54

Isto funciona para mim nas janelas:

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

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

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

Se a sua senha contiver caracteres especiais, tais como:",@,: e assim por diante, substitua-os pelos seus valores codificados URL. Por exemplo "->%22, @->%40, :->%3A. %5C é usado para o carácter \.

 14
Author: maximus, 2015-12-24 06:49:13
$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port
 7
Author: Sharan Rajendran, 2014-08-03 19:56:57

Embora eu tenha definido o 'proxy' com a configuração, o problema não foi resolvido, mas depois Este funcionou comigo.

MPN --https-proxy http://XX.AA.AA.BB:8080 instalar os 'plugins' de cordova

MPN -- proxy http://XX.AA.AA.BB:8080 Instalar

 6
Author: Sreedhar GS, 2014-11-14 11:26:16
Tentei todas estas opções, mas o meu representante não estava a ter nada por alguma razão. Então, nascido da desparação / desespero, eu tentei aleatoriamente curl na minha concha Git Bash, e funcionou.

Desligar todas as opções do 'proxy' com

npm config rm proxy
npm config rm https-proxy
E depois correr na minha concha Git Bash funcionou perfeitamente. Eu não sei como é configurado corretamente para o proxy e o prompt do Windows cmd não é, mas funcionou.
 6
Author: Evan Knowles, 2016-06-02 09:10:04
Isto funcionou comigo.
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
npm set strict-ssl=false
 6
Author: abhishek khandait, 2017-04-04 10:32:28

vim ~/.npmrc em sua máquina Linux e adicionar seguinte. Não se esqueça de adicionar {[[2]} parte porque isso causa falha em muitos casos.

proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/
 6
Author: Abhishek Dwivedi, 2017-05-23 10:59:40
Isto funcionou comigo. Configura o 'proxy' de http e https.
 5
Author: Rohith M, 2016-02-15 13:30:28
Tenta encontrar .npmrc em C:\Users\.npmrc

Então abra (bloco de notas), escreva e salve dentro:

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

PS: remover " " por favor !!

 5
Author: Igor Beaufils, 2016-07-20 16:11:01
npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/
Isto resolveu o meu problema.
 5
Author: venugopal, 2017-08-28 02:58:57

Usar abaixo do comando em cmd ou Git Bash ou outra linha de comandos

$ npm configure proxy " http://192.168.1.101:4128"

$ npm configuração https-proxy " http://192.168.1.101:4128"

Onde 192.168.1.101 é proxy ip e 4128 é port. muda de acordo com a configuração do 'proxy'. funciona comigo.

 4
Author: Pankaj, 2016-07-19 10:54:30
Para mim, apesar do python etc funcionar, 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/

Como instruído, mas continuava a ter o mesmo erro.

Só foi quando eu removi https-proxy https://proxyccc.xxx.ca:8080 do ... ficheiro npmrc que npm install electron --save-dev worked

 4
Author: Nick Flanagan, 2016-09-09 18:23:03
Depois de tentar respostas diferentes finalmente, as primeiras quatro linhas das respostas de @Kavar ajudam-me a resolver o 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
 4
Author: Muhammad Faizan Khan, 2017-12-06 04:57:17

No sistema Windows

Tente remover a configuração do 'proxy' e do registo (se já estiver definida) e definir as variáveis de ambiente na linha de comandos via

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

Depois tente executar o npm install. Com isto, não vai colocar o proxy .npmrc mas para essa sessão ele vai funcionar.

 3
Author: SoSufi, 2017-05-12 05:00:44

Muitas aplicações (por exemplo, npm) podem usar a configuração de 'proxy' a partir de variáveis de ambiente do utilizador.

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

Http://user:password@proxyAddress:proxyPort

Por exemplo, se tiver janelas, pode adicionar o 'proxy' da seguinte forma:

How it looks on Windows

 2
Author: Dmytro Melnychuk, 2017-05-09 18:28:41

No meu caso, esqueci-me de definir o "http://" nos meus ficheiros de configuração (pode ser encontrado em C: \Users \ [utilizador] \ .o 'proxy' do npmrc adere. Então, em vez de ter

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

Eu tinha

proxy=[IPADDRESS]:[PORTNUMBER]
https-proxy=[IPADDRESS]:[PORTNUMBER]
O que, claro, não funcionou, mas as mensagens de erro também não ajudaram muito...
 2
Author: Acroneos, 2017-06-12 08:05:10

Houve muitas respostas acima para esta pergunta, mas nenhuma delas funcionou para mim. Todos eles mencionados para adicionar http:// prefixo. Por isso, também o adicionei. Todos falharam.

Finalmente funciona depois de eu ter removido acidentalmente http:// o 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 detrás disto, mas funcionou. Se nenhuma das respostas acima funciona para ti, talvez possas tentar desta maneira. Espero que este seja útil.
 2
Author: SkuraZZ, 2017-12-13 07:51:41

Quando passo sem o prefixo http / http na configuração do 'proxy', o MPN falhou, mesmo quando a máquina e o porto do 'proxy' eram valores correctos. Ele só funcionou depois de adicionar o prefixo do protocolo.

 1
Author: Govind Avireddi, 2016-06-20 06:39:11
O meu problema foi um erro da minha parte. Como eu tinha rapidamente um dia deixei meus proxies em uma janela *.ficheiro bat (http_ proxy, https_ proxy, e ftp_ proxy), esqueci-me de escapar aos caracteres especiais para o domínio codificado url\utilizador (%5C) e senha com o ponto de interrogação '?"(%3F). Isto é, uma vez que tenha o comando codificado, não se esqueça de escapar ao '%' no comando bat file.

Mudei

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

A

set http_proxy=http://domain%%5Cuser:password%%3F@myproxy:8080
Talvez seja um caso extremo. mas espero que ajude alguém.
 1
Author: Brandon Søren Culley, 2016-10-04 16:41:42

existe uma boa informação na página do curl sobre o SSL e as emissões de Certificados . Baseio a maior parte da minha resposta na informação lá.

Usar strict-ssl false é uma má prática e pode criar problemas. O que podemos fazer em vez disso é adicionar o certificado que está sendo injetado, pelo certificado "homem no meio".

Como resolver isto no Windows:

  1. descarregue os certificados de AC decurl com base no pacote de AC do Mozilla. Você também pode usar curl's "firefox-db2pem.sh" shellscript to convert your local Firefox database.
  2. vá para uma página web usando https, por exemplo Stackoverflow em Chrome ou Internet Explorer
  3. carregue no ícone Bloquear, carregue em ver certificados ou "válido" no Chrome
  4. navegue até ao caminho de Certificação. O certificado de topo, ou o certificado de raiz é o que queremos extrair. Carregue nesse certificado e, em seguida, "ver certificado"
  5. Clique na segunda página, "Detalhes". Carregue Em " Copiar arquivar". Escolha o formato DER e tome nota de onde você gravar o arquivo. Escolha um nome de ficheiro adequado, como rootcert.cer
  6. Se tiver o Git instalado, terá o openssl.exe. Caso contrário, instale o git para o windows Nesta fase. O mais provável é que o executável openssl esteja em C:\Program Files\git\usr\bin\openssl.exe. Vamos usar openssl para converter o arquivo para o formato PEM que precisamos para NPM para entendê-lo.
  7. converta o ficheiro que gravou no Passo 5 usando isto comando:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    em que rootcert é o nome do ficheiro do certificado que gravou no Passo 5.
  8. abra o exterior.pem em um editor de texto inteligente o suficiente para entender terminações de linha, então não o bloco de notas. Seleccione todo o texto e copie-o para a área de transferência.
  9. Agora vamos colar esse conteúdo até ao fim do pacote de certs da AC feito no Passo 1. Então abre o cacert.pem no seu editor de texto avançado. Ir para o fim do ficheiro e colar o conteúdo do passo anterior até ao fim do arquivo.
  10. copia a cabundle salva.pem para um lugar adequado. Por exemplo, o seu %userprofile% ou ~. Anote a localização do arquivo.
  11. Agora vamos dizer ao npm / fio para usar o novo pacote. Numa linha de comando, escreva
    npm config set cafile **C:\Users\username\cacert.pem
    em que C:\Users\username\cacert.pem é o caminho a partir do passo 10. Opcionalmente: liga o strict-ssl outra vez, npm config set strict-ssl true

Ufa! Conseguimos! Agora o MPN pode entender como se conectar. O bónus é que podes dizer ao curl para usar o mesmo cabundle.pem e ele também vai entender HTTPs.

 1
Author: sur, 2018-03-07 00:12:27