Questão Como instalar o NPM por trás do proxy de autenticação no Windows?


Eu preciso executar a última versão do Nó e NPM no Windows. Eu instalei o Node 0.5.8 e baixei as fontes do NPM do GitHub. As etapas que segui para instalar o NPM foram listadas em seu site do GitHub, mas tenho um problema ao executar o seguinte comando:

node cli.js install npm -gf

mas falha com a seguinte mensagem de erro:

Error: connect UNKNOWN
at errnoException (net_uv.js:566:11)
at Object.afterConnect [as oncomplete] (net_uv.js:557:18)

System Windows_NT 5.1.2600
command "...\\Node\\bin\\node.exe" "...\\npm\\cli.js" "install" "npm" "-gf"
cwd ...\npm
node -v v0.5.8
npm -v 1.0.94
code UNKNOWN

Eu acho que isso é um problema porque eu preciso de autenticação no meu proxy para se conectar à Internet. Mas não encontrei maneira de dizer ao instalador para usar minhas credenciais para login. Existe a possibilidade de fornecer meu IP de proxy e informações de login para instalação do npm talvez através de argumentos de linha de comando?

Eu posso fornecer o log completo (mas parece não ter mais informações relevantes) usando pastebin se necessário.


29


origem


Um pequeno truque, se o nome do usuário contiver a notação domínio \ usuário, substitua a barra invertida pelo código de escape http (% 5C)
@layos Obrigado muuuito muito. Se isso fosse reddit, eu te daria ouro. - Korinna


Respostas:


set http_proxy funcionou muito bem para mim, mas eu tive que entrar sempre que abria o prompt de comando. Então eu tive que combinar várias respostas e agora o meu é permanente.

Minha sequência foi a seguinte:

  • Vamos para C:\Users\YourUserName
  • Crie um arquivo chamado .npmrc
  • Dentro desse arquivo, digite o seguinte (se você estiver em um domínio do AD):

proxy = http://domain\\username:password@ip:port

  • Ou use isso, você NÃO está em um domínio do AD:

proxy = http://username:password@ip:port

  • Salve o arquivo
  • Abra um prompt de comando e tente usar npm

Outros obtiveram sucesso extra com o seguinte comando extra:

strict-ssl = false

* Você deve ser capaz de usar um endereço IP ou o URL para o proxy no lugar de "IP" acima.

Sua string de proxy pode precisar ser ajustada um pouco, mas isso fez com que eu não tivesse que adicionar isso todas as vezes.

Felicidades


38



Atenção, se a sua senha contiver "@", o npm não analisará sua configuração de proxy corretamente. Uma possível solução alternativa é colocar um nome de usuário falso: senha na configuração do npm e usar um proxy local (como o violinista) para modificar o cabeçalho de Autorização de Proxy da solicitação para ter o nome de usuário: senha correto. Tenha em mente que o nome de usuário: senha armazenada em Autorização de Proxy é codificada em base64. - BStruthers
Tenho o meu para trabalhar com: proxy = http://ip:port/ https-proxy = http://ip:port/ registry = http://registry.npmjs.org/ strict-ssl = false - Luke
não recebi o meu para trabalhar com nome de usuário: senha - philx_x


Talvez a configuração de uma variável de ambiente funcione para você:

set HTTP_PROXY=http://user:pass@server.url:port

(No meu caso, isso resolve o "connect UNKNOWN", mas eu recebo um erro "socket hang up" completamente diferente. Eu também tentei configurar a variável de ambiente HTTPS_PROXY, mas obtive o mesmo resultado.)


10



Eu tentei definir a variável de ambiente e também tentei passar --proxy usuário: pass@server.url: port para o comando, mas agora eu sempre obter ECONNREFUSED .. Preciso especificar meu domínio do AD para o login do proxy? - Tobias
Trabalhou como um encanto. Obrigado! - x97mdr
@Tobias tentar set HTTP_PROXY=http://domain\user:pass@server.url:port - Adam Grant


Eu tive esse problema idêntico e aqui está o que eu fiz para fazer este trabalho:

  • Vamos para: C:\Users\YourUserName
  • Crie um arquivo chamado .npmrc
  • E a entrada vai ler:

    registry = http://registry.npmjs.org
    
  • Experimente o comando node cli.js install npm -gf novamente.


8



Eu criei o arquivo com o conteúdo que você mencionou, mas ainda recebendo o erro UNKNOWN conectar :( - Tobias
Felicidades por isso. Fez um "npm config set registry registry.npmjs.org "; para contornar o https: // e tudo está bem na minha configuração do windows. - Gavin Gilmour
se alguém receber a mensagem ETIMEOUT, adicione a configuração de proxy com node config set proxy http://username:password@server:port - Jeremy S.
O que funcionou para mim foi criar o ~/.npmrc arquivo como acima, que diz ao npm para usar o http:// registro em vez de https://e, em seguida, definindo meu http_proxy variável de ambiente para http://myusername:mypassword@proxy.company.com:1234 - Maxy-B
Atenção, se a sua senha contiver "@", o npm não analisará sua configuração de proxy corretamente. Uma possível solução alternativa é colocar um nome de usuário falso: senha na configuração do npm e usar um proxy local (como o violinista) para modificar o cabeçalho de Autorização de Proxy da solicitação para ter o nome de usuário: senha correto. Tenha em mente que o nome de usuário: senha armazenada em Autorização de Proxy é codificada em base64. - BStruthers


Depois de alguma pesquisa, eu poderia usá-lo desta maneira:

  1. Instale o Servidor Proxy de Autorização NTLM ou outro servidor proxy para NTLM, como o Cntlm. Pessoalmente, eu prefiro o servidor python, porque posso mexer nele e o desempenho não é um problema.

  2. Configure a configuração; note que no meu caso, eu tive que habilitar o modo LM e NT, e eu suspeitava que fosse o caso normal, hoje em dia.

  3. Configure a variável de ambiente http_proxy e https_proxy para apontar para seu proxy local:

    set http_proxy = "localhost: 5865"
    set https_proxy = "localhost: 5865"

  4. npm deve funcionar agora, é claro que deve ser executado a partir de um shell onde as variáveis ​​de ambiente acima estão definidas.


4





O seguinte funcionou para mim.

No Windows 7:

npm config set proxy xxhttp://username:password@proxyhost:port# 

Isso deve criar um arquivo chamado .npmrc no C:/users/<username> pasta.


3





Digite isto na linha de comando:

npm set proxy http://user:pass@ip:port

npm set https-proxy http://user:pass@ip:port

NÃO SE ESQUEÇA DE INCLUIR HTTP: // antes do seu nome de usuário. Isso funcionou para mim.


3





Esse problema foi resolvido depois de criar o .npmrc arquivo como acima e, em seguida, executando o comando adduser e seguindo os prompts cmd.

npm adduser

Execute o seguinte comando para ver se você tem um nome de usuário autorizado:

npm whoami

2





Cada uma das respostas acima precisa que o usuário escreva sua senha em um arquivo de texto ou em uma variável de ambiente.

Pessoalmente, não gostei de uma solução como essa, por sua abordagem insegura. Então eu tentei escrever um aplicativo que injeta o token Kerberos do usuário atual nas trocas entre o cliente (npm, bower, git) e o proxy. Dito isso, o Active Directory é apenas uma implementação proprietária do Kerberos.

Eu uso este software todos os dias, em um host do Windows 8.1. Você pode encontrar o código (golang) e os primeiros binários de lançamento https://github.com/nilleb/authentication-proxy.


2





Todas as três coisas funcionaram para mim em .npmrc

proxy = http://unam:pwd@host:port
https-proxy = http://unam:pwd@host:port
registry = http://registry.npmjs.org

1





Pelo menos no Windows, funciona para mim com a seguinte configuração:

proxy = http: //domínio% 5Cusername:senha@IP de Proxy:porta

ou seja, (1) usar %5C ao invés de \ (como sugerido em outro lugar) e (2) use o endereço IP em vez do nome da máquina local para o servidor proxy.


1



Isso está correto - o domínio + nome de usuário e a senha precisam ser codificados em URL separadamente. Por exemplo. se você tiver # na sua senha, substitua-a por% 23 - saille