Existe-t-il un moyen de faire installer npm (la commande) derrière le proxy?

266

Lisez à propos d'une variable proxy dans un .npmrcfichier mais cela ne fonctionne pas. Essayer d'éviter de télécharger manuellement tous les packages requis et l'installation.

Ben
la source

Réponses:

343

J'ai résolu ce problème de cette façon:

  1. J'exécute cette commande:

    npm config set strict-ssl false
  2. Définissez ensuite npm pour qu'il s'exécute avec http, au lieu de https:

    npm config set registry "http://registry.npmjs.org/"
  3. Ensuite, j'installe des packages en utilisant cette syntaxe:

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

Ignorez la username:passwordpartie si le proxy ne vous oblige pas à vous authentifier

EDIT: Un de mes amis vient de signaler que vous pouvez obtenir NPM travailler derrière un proxy en définissant DEUX HTTP_PROXY et variables d'environnement https_proxy, alors il utilise normalement la commande NPM installation express (par exemple)

EDIT2: Comme l'a commenté @BStruthers, gardez à l'esprit que les mots de passe contenant "@" ne seront pas analysés correctement, si contient @ mettez le mot de passe entier entre guillemets

Renato Gama
la source
7
Attention, si votre mot de passe contient "@", npm n'analysera pas correctement votre paramètre proxy. Une solution de contournement possible consiste à mettre un faux nom d'utilisateur: mot de passe dans la configuration npm et à utiliser un proxy local (comme un violoneux) pour modifier l'en-tête Proxy-Authorization de la demande afin d'avoir le bon nom d'utilisateur: mot de passe. Gardez à l'esprit que le nom d'utilisateur: mot de passe stocké dans Proxy-Authorization est codé en base64.
BStruthers
14
Si votre mot de passe contient un symbole @, vous pouvez le transmettre en mettant votre nom d'utilisateur et votre mot de passe entre guillemets.
absynthe minded web smith
9
Vous pouvez avoir des caractères spéciaux dans votre mot de passe, mais ils doivent être encodés en URL. Donc, si votre mot de passe était my@password, votre fichier .npmrc devrait avoir my%40passwordpour la partie mot de passe. Le mettre entre guillemets fonctionne dans certains cas, mais l'encoder est infaillible.
Chris Jaynes
1
Un autre gotcha! Si vous avez déjà défini des variables système HTTP-PROXY, assurez-vous de les effacer!
Sydwell
1
Vous légende! J'avais renoncé à essayer de faire travailler npm au travail, mais cela l'a finalement résolu.
tamj0rd2
308

Configurer le npmproxy

Pour HTTP:

npm config set proxy http://proxy_host:port

Pour HTTPS:

utilisez l'adresse proxy https s'il y en a une

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

sinon réutiliser l'adresse proxy http

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

Remarque : le https-proxy n'a pas httpscomme protocole, mais http.

jithesh
la source
9
Pas de support SOCKS?
grm
57
Notez que le https-proxy n'a pas 'https' comme protocole, mais 'http'. Changer cela a résolu le problème pour moi.
peterhil
3
@peterhil Merci pour cette astuce. C'est fou mais j'ai passé des heures à résoudre ce problème avec "https". Une idée pourquoi ça marche comme ça?
Manoj NV
2
@ManojNV, la connexion au serveur proxy n'est pas cryptée. Il ne s'agit pas de parler HTTPS au serveur proxy, juste HTTP. La charge utile est SSL entre le client et le serveur de destination. S'il s'agissait de HTTPS sur le serveur proxy, les choses seraient cryptées / décryptées deux fois.
Jamie
1
Subtil. Merci beaucoup @peterhil
Alec Breton
104

En cas de doute, essayez toutes ces commandes, comme je le fais:

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

=======

METTRE À JOUR

Mettez vos paramètres dans ~/.bashrcou ~/.bash_profilevous n'avez donc pas à vous soucier de vos paramètres à chaque fois que vous ouvrez une nouvelle fenêtre de terminal!

Si votre entreprise est comme la mienne, je dois changer mon mot de passe assez souvent. J'ai donc ajouté ce qui suit dans mon ~ / .bashrc ou ~ / .bash_profile pour que chaque fois que j'ouvre un terminal, je sais que mon npm est à jour!

  1. Collez simplement le code suivant au bas de votre ~/.bashrcfichier:

    ######################
    # 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. Modifiez ensuite les champs "nom d'utilisateur", "mot de passe" et "proxy" dans le code que vous avez collé.

  3. Ouvrez un nouveau terminal

  4. Vérifiez vos paramètres en exécutant npm config listetcat ~/.npmrc

  5. Essayez d'installer votre module en utilisant

    • npm install __, ou
    • npm --without-ssl --insecure install __, ou
    • remplacer vos paramètres proxy en utilisant npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __.
    • Si vous souhaitez que le module soit disponible globalement, ajoutez une option -g
Katie
la source
3
La dernière commande a fonctionné pour moi. Tous ceux qui ont échoué avant
foecum
3
j'ai lu environ 50 réponses concernant cette configuration de proxy fu *** ing ... le seul qui a fonctionné était votre réponse ... merci !!!
Lorenzo
4
Merci les gars!! Heureux que ça marche! Cela a été un énorme mal de tête au travail, donc je suis heureux de pouvoir aider les autres: P
Katie
2
+1. Cela marche. Je Commands- 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 falsepour config NPM puis installé le paquet de NPM à l' aide npm --proxy http://myusername:[email protected]:8080 --without-ssl --insecure -g install {packagename}. Merci
Atur
1
Après trois jours d'essais, cette solution a fonctionné pour moi.
Mohan Singh
33

Avez-vous essayé les options de ligne de commande au lieu du .npmrcfichier?

Je pense que quelque chose comme ça a npm --proxy http://proxy-server:8080/ install {package-name}fonctionné pour moi.

J'ai également vu ce qui suit: npm config set proxy http://proxy-server:8080/

Ben Humphreys
la source
+1 j'ai essayé les autres c'était celui qui fonctionnait pour moi. avec la partie auth de Renato Gama
winner_joiner
20

Bien qu'il existe déjà de nombreux bons conseils, pour mon environnement (Windows 7, utilisant PowerShell) et la dernière version disponible de node.js (v8.1.2), tout cela n'a pas fonctionné, sauf lorsque j'ai suivi les paramètres de brunowego .

Vérifiez donc vos paramètres avec:

npm config list

Paramètres derrière 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

J'espère que cela fera gagner du temps à quelqu'un

Carmine Tambascia
la source
comment trouver mon adresse proxy?
Robin
@Robin D'une façon, si vous utilisez des fenêtres, IE les stocke. Vous pouvez aller sous IE et afficher les paramètres LAN sous connexion, et cela s'affichera là.
eaglei22
@Robin dépend bien sûr du navigateur, mais est généralement sous paramètres
Carmine Tambascia
@Robin dans les navigateurs sous le paramètre vous devriez voir / vérifier le paramètre proxy. Habituellement, il y a un fichier avec .pac où le dernier devrait être: PROXY YourProxyAdress: PORT
Carmine Tambascia
17

Cela fonctionne pour moi dans Windows:

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

Si vous n'êtes dans aucun domaine, utilisez:

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

Si votre mot de passe contient des caractères spéciaux tels que ", @, :et ainsi de suite, de les remplacer par leurs valeurs codées URL. Par exemple "-> %22, @-> %40, :-> %3A. %5Cest utilisé pour le personnage \.

maximus
la source
6
Merci pour les conseils, cela a fonctionné pour moi. Vous pouvez ouvrir votre console javascript avec ctrl + shift + j et taper encodeURIComponent("YourP@ssword")pour obtenir la version encodée de votre mot de passe.
jaggedsoft
15

Pour configurer le proxy http, définissez l'indicateur -g :

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

Pour le proxy https, assurez-vous à nouveau que l' indicateur -g est défini:

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

Andrei
la source
quel est le sens de -g?
David
1
le configure globalement, pas pour l'installation locale
Andrei
8
$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port
Sharan Rajendran
la source
1
Ajoutez quelques commentaires s'il vous plaît.
Max
8

Cela a fonctionné pour moi-

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
la source
7

vim ~/.npmrcdans votre machine Linux et ajoutez ce qui suit. N'oubliez pas d'ajouter une registrypièce car cela provoque une défaillance dans de nombreux cas.

proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/
Abhishek Dwivedi
la source
2
De nombreux proxys prennent en charge la tunnellisation des requêtes https, mais ils ne géreront pas eux-mêmes une connexion https. En tant que tel, lorsque vous rencontrez des problèmes, essayez de vous modifier https-proxy=https://..enhttps-proxy=http://..
YoYo
7

Enfin, j'ai réussi à résoudre ce problème en étant un proxy avec l'authentification AD. J'ai dû exécuter:

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

Il est très important de coder par URL tous les caractères spéciaux comme le backshlash ou # Dans mon cas, j'ai dû coder

  1. backshlashavec% 5C alors domain\user willsoyezdomain%5Cuser
  2. #signer avec %23%0Aun mot de passe comme Password#2seraPassword%23%0A2

J'ai également ajouté les paramètres suivants:

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

Bien que j'aie défini un proxy avec config, le problème n'a pas été résolu mais après celui-ci a fonctionné pour moi:

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

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

Sreedhar GS
la source
Celui-ci fonctionne pour moi, pas d'autre changement. Ouvrez la fenêtre de commande et utilisez ci-dessus et cela fonctionnera
AKS
6

J'ai essayé toutes ces options, mais mon proxy n'en avait aucune pour une raison quelconque. Puis, né de la désespoir / désespoir, j'ai essayé curlau hasard dans mon shell Git Bash, et ça a marché.

Désinitialisation de toutes les options de proxy à l'aide de

npm config rm proxy
npm config rm https-proxy

Et puis, courir npm installdans mon shell Git Bash a parfaitement fonctionné. Je ne sais pas comment il est correctement configuré pour le proxy et l' cmdinvite Windows ne l'est pas, mais cela a fonctionné.

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

Cela a résolu mon problème.

venugopal
la source
La chose cruciale était de changer le lien vers le registre: au lieu de https, j'avais auparavant un lien http.
Alex Fainshtein
6

Après avoir finalement lié différentes réponses, les quatre premières lignes des réponses de @Kayvar m'aident à résoudre le problème:

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
la source
5

Essayez de trouver .npmrc dans C: \ Users \ .npmrc

puis ouvrez (bloc-notes), écrivez et enregistrez à l'intérieur:

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

PS: supprimez "<" et ">" s'il vous plaît !!

Igor Beaufils
la source
5

Pour moi, même si python, etc. fonctionnera tous, alors que notre proxy d'entreprise npm ne le ferait pas.

j'ai essayé

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/

comme indiqué mais continuait à obtenir la même erreur.

Ce n'est que lorsque j'ai supprimé https-proxy https://proxyccc.xxx.ca:8080 du fichier .npmrc que npm install electron --save-dev a fonctionné

Nick Flanagan
la source
1
Ce https-proxyn'est probablement pas le cas https:. Au moins, avoir le même port pour chacun n'est probablement pas correct, mais je pense qu'ils ont probablement tous les deux la même valeur.
toddkaufmann
5

Sur le système Windows

Essayez de supprimer les paramètres de proxy et de registre (s'ils sont déjà définis) et définissez les variables d'environnement sur la ligne de commande via

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

essayez ensuite d'exécuter l'installation de npm. Par cela, vous ne définirez pas le proxy en .npmrc mais pour cette session, cela fonctionnera.

SoSufi
la source
Cela a fonctionné pour moi. Le symbole égal est ce qui semblait tout faire fonctionner. Avant cela, j'utilisais juste, SET HTTP_PROXY http://username:password@domain:portmais le passage à SET HTTP_PROXY=http://username:password@domain:portsemblait tout faire fonctionner
Dib
4

Utilisez la commande ci-dessous à cmd ou GIT Bash ou à une autre invite

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

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

où 192.168.1.101 est l'IP proxy et 4128 est le port. changer en fonction de vos paramètres de proxy. ses travaux pour moi.

Pankaj
la source
1
J'ai dû utiliser un domaine pour l'authentification, et j'ai utilisé une barre oblique inversée: avec cette chaîne% 5C. Ça a finalement marché!
Francesco
4

De nombreuses applications (par exemple npm) peuvent utiliser les paramètres de proxy à partir des variables d'environnement utilisateur.

Vous pouvez simplement ajouter à votre environnement les variables HTTP_PROXY et HTTPS_PROXY qui auront la même valeur pour chacune

http: // utilisateur: mot de passe @ proxyAddress: proxyPort

Par exemple, si vous avez Windows, vous pouvez ajouter un proxy comme suit:

À quoi ça ressemble sous Windows

Dmytro Melnychuk
la source
4

Dans mon cas, j'ai oublié de définir les adresses proxy "http: //" dans mes fichiers de configuration (qui se trouvent dans C: \ Users \ [USERNAME] \ .npmrc). Donc au lieu d'avoir

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

j'ai eu

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

Ce qui bien sûr n'a pas fonctionné, mais les messages d'erreur n'ont pas beaucoup aidé non plus ...

Acroneos
la source
4

Il y a eu beaucoup de réponses ci-dessus pour cette question, mais aucune n'a fonctionné pour moi. Tous ont mentionné l'ajout d'un http://préfixe. Je l'ai donc ajouté aussi. Tout a échoué.

Cela fonctionne finalement après que j'ai accidentellement supprimé le http://préfixe. La configuration finale est comme ceci:

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

Je ne connais pas la logique derrière cela, mais cela a fonctionné. Si aucune des réponses ci-dessus ne vous convient, vous pouvez peut-être essayer de cette façon. J'espère que celui-ci est utile.

SkuraZZ
la source
4

Il y a de bonnes informations sur la page de curl sur SSL et les problèmes de certificats . Je base l'essentiel de ma réponse sur les informations qui s'y trouvent.

L'utilisation de strict-ssl false est une mauvaise pratique et peut créer des problèmes. Ce que nous pouvons faire à la place, c'est ajouter le certificat qui est injecté, par le certificat "l'homme au milieu".

Comment résoudre ce problème sous Windows:

  1. Téléchargez les certificats CA à partir de curl basé sur le bundle CA de Mozilla. Vous pouvez également utiliser le script shell "firefox-db2pem.sh" de curl pour convertir votre base de données Firefox locale.
  2. Accédez à une page Web à l'aide de https, par exemple Stackoverflow dans Chrome ou Internet Explorer
  3. Cliquez sur l'icône de verrouillage, cliquez sur Afficher les certificats ou "Valide" dans Chrome
  4. Accédez au chemin de certification. Le certificat supérieur, ou le certificat racine, est celui que nous voulons extraire. Cliquez sur ce certificat, puis sur "afficher le certificat"
  5. Cliquez sur le deuxième onglet, "Détails". Cliquez sur "Copier dans un fichier". Choisissez le format DER et notez où vous enregistrez le fichier. Choisissez un nom de fichier approprié, comme rootcert.cer
  6. Si vous avez installé Git, vous aurez openssl.exe. Sinon, installez git pour windows à ce stade. Il est fort probable que l'exécutable openssl se trouve dans C: \ Program Files \ git \ usr \ bin \ openssl.exe. Nous utiliserons openssl pour convertir le fichier au format PEM dont nous avons besoin pour que NPM le comprenne.
  7. Convertissez le fichier que vous avez enregistré à l'étape 5 en utilisant cette commande:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    rootcert est le nom de fichier du certificat que vous avez enregistré à l'étape 5.
  8. Ouvrez le fichier outcert.pem dans un éditeur de texte suffisamment intelligent pour comprendre les fins de ligne, donc pas le bloc-notes. Sélectionnez tout le texte et copiez-le dans le presse-papiers.
  9. Nous allons maintenant coller ce contenu à la fin du bundle CA Cert créé à l'étape 1. Ouvrez donc le cacert.pem dans votre éditeur de texte avancé. Accédez à la fin du fichier et collez le contenu de l'étape précédente à la fin du fichier. (Conservez la ligne vide sous ce que vous venez de coller)
  10. Copiez le cabundle.pem enregistré dans un endroit approprié. Par exemple, votre% userprofile% ou ~. Prenez note de l'emplacement du fichier.
  11. Nous allons maintenant dire à npm / yarn d'utiliser le nouveau bundle. Dans une ligne de commande, écrivez
    npm config set cafile **C:\Users\username\cacert.pem
    C: \ Users \ username \ cacert.pem est le chemin de l'étape 10.
  12. Facultativement: réactivez strict-ssl, npm config set strict-ssl true

Phew! On l'a fait! Maintenant, npm peut comprendre comment se connecter. Le bonus est que vous pouvez dire à curl d'utiliser le même cabundle.pem et il comprendra également les HTTP.

sur
la source
3

Voici les étapes que j'ai suivies (Windows):

  1. Modifiez le fichier suivant C:\Users\<WIN_USERNAME>\.npmrc
  2. Exportez le certificat vers votre système de fichiers à partir de l'adresse suivante: https://registry.npmjs.org

  3. Accédez à l'emplacement du certificat exporté et exécutez la commande suivante:

    npm config set cafile npm_certificate.cer

  4. Ajoutez les modifications suivantes au fichier: registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer

Vous devriez maintenant être prêt à partir!

Marco
la source
2

Mon problème se résumait à une erreur stupide de ma part. Comme j'avais un jour rapidement déposé mes proxys dans un fichier windows * .bat (http_proxy, https_proxy et ftp_proxy), j'ai oublié d'échapper les caractères spéciaux pour le domaine \ user encodé en url \ user (% 5C) et le mot de passe ayant le point d'interrogation '?' (% 3F). C'est-à-dire, une fois que vous avez la commande encodée, n'oubliez pas d'échapper au '%' dans la commande bat file.

j'ai changé

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

à

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

C'est peut-être un cas de pointe, mais j'espère que cela aide quelqu'un.

Brandon Søren Culley
la source
1

lorsque je donne sans le préfixe http / http dans les paramètres proxy, npm a échoué même lorsque l'hôte proxy et le port étaient des valeurs correctes. Cela n'a fonctionné qu'après l'ajout du préfixe de protocole.

Govind Avireddi
la source
0

Ouvrez simplement le nouveau terminal et tapez npm config editet npm config -g edit. Réinitialiser les paramètres par défaut. Après avoir fermé le terminal, ouvrez le nouveau et tapez npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>si vous en avez besoin globalement, ajoutez-le -g.

Cela a fonctionné pour moi, j'espère que cela fonctionnera pour vous :)

rufatZZ
la source