web-dev-qa-db-fra.com

Est-il possible de faire en sorte que npm install (la commande) fonctionne derrière un proxy?

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

244
Ben

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

  1. Je lance cette commande:

    npm config set strict-ssl false
    
  2. Ensuite, configurez 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 les paquets en utilisant cette syntaxe:

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

Ignore la partie username:password si le proxy ne vous oblige pas à vous authentifier

EDIT: Un de mes amis vient de signaler que vous pouvez forcer NPM à travailler derrière un proxy en définissant DEUX HTTP_PROXY et les variables d’environnement HTTPS_PROXY, puis en émettant normalement la commande npm install express (par exemple)

EDIT2: Comme @BStruthers a commenté, 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

315
Renato Gama

Configuration npm proxy

Pour HTTP:

npm config set proxy http://proxy_Host:port

Pour HTTPS:

utilisez l'adresse proxy https s'il en existe 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

Note: Le proxy https n'a pas le protocole https, mais http.

283
j.i.t.h.e.s.h

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

=======

UPDATE

Mettez vos paramètres dans ~/.bashrc ou ~/.bash_profile afin que vous n'ayez 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 afin que, chaque fois que j'ouvre un terminal, je sache que mon npm est à jour!

  1. Collez simplement le code suivant au bas de votre fichier ~/.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. Ensuite, éditez les champs "nom d'utilisateur", "mot de passe" et "proxy" dans le code que vous avez collé.

  3. Ouvrir un nouveau terminal

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

  5. Essayez d’installer votre module en utilisant

    • npm install __, ou
    • npm --without-ssl --insecure install __, ou
    • écrasez vos paramètres de proxy en utilisant npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __.
    • Si vous souhaitez que le module soit disponible globalement, ajoutez l'option -g
96
Katie

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

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

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

31
Ben Humphreys

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

Alors vérifiez 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

20
Carmine

Pour configurer le proxy http, activez le drapeau - g:

Sudo npm config set proxy http://proxy_Host:port -g

Pour le proxy https, assurez-vous que le drapeau - g est bien défini:

Sudo npm config set https-proxy http://proxy_Host:port -g

15
Andrei

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, remplacez-les par leurs valeurs encodées en URL. Par exemple, "-> %22, @-> %40, :-> %3A. %5C est utilisé pour le caractère \.

14
maximus
$ npm config set proxy http://login:pass@Host:port
$ npm config set https-proxy http://login:pass@Host:port
8
Sharan Rajendran

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
8

vim ~/.npmrc sur votre machine Linux et ajoutez ce qui suit. N'oubliez pas d'ajouter registry une partie, car cela peut provoquer des erreurs.

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

Bien que j'ai mis 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:808 installez cordova-plugins

npm --proxy http://XX.AA.AA.BB:808 installer

6
Sreedhar GS

Après avoir finalement lié différentes réponses, les quatre premières lignes de @Kayvar answers 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
6
npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/

Cela a résolu mon problème.

6
venugopal

J'ai essayé toutes ces options, mais mon mandataire n'en avait aucune pour une raison quelconque. Puis, né de désespoir/désespoir, j’ai essayé au hasard curl dans mon shell Git Bash, et cela a fonctionné.

Désactiver toutes les options de proxy en utilisant

npm config rm proxy
npm config rm https-proxy

Et puis exécuter npm install dans mon shell Git Bash a parfaitement fonctionné. Je ne sais pas comment il est correctement configuré pour le proxy et l'invite Windows cmd ne l'est pas, mais cela a fonctionné.

6
Evan Knowles

Enfin, j'ai réussi à résoudre ce problème en étant derrière le proxy avec l'authentification AD. Je devais 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 d'encoder les caractères spéciaux tels que le backshlash ou # dans mon adresse URL.

  1. backshlash avec% 5C pour que domain\user will soit domain%5Cuser
  2. # signe avec %23%0A afin qu'un mot de passe comme Password#2 soit Password%23%0A2

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

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

Pour moi, même si python etc fonctionnera, même si notre proxy d'entreprise ne fonctionne 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 à recevoir la même erreur.

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

5
Nick Flanagan

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: supprimer "<" et ">" s'il vous plaît !!

5
Igor Beaufils

Cela a fonctionné pour moi. Définissez les proxy http et https.

5
Rohith M

Il y a de bonnes informations sur la page de curl sur problèmes de SSL et de certificat . Je base la majeure partie de ma réponse sur les informations fournies.

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 d’ajouter le certificat en cours d’injection, par le certificat "homme au milieu".

Comment résoudre ceci sous Windows:

  1. Téléchargez les certificats de CA à partir de curl en fonction du kit de CA de Mozilla. Vous pouvez également utiliser le script shells "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 verrou, puis 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 "Voir le certificat"
  5. Cliquez sur le deuxième onglet, "Détails". Cliquez sur "Copier dans un fichier". Choisissez le format DER et notez l'emplacement où vous enregistrez le fichier. Choisissez un nom de fichier approprié, tel que rootcert.cer
  6. Si vous avez installé Git, vous aurez openssl.exe. Sinon, installez git pour Windows à ce stade. L'exécutable openssl sera probablement à l'emplacement C:\Program Files\git\usr\bin\openssl.exe. Nous allons utiliser openssl pour convertir le fichier au format PEM dont nous avons besoin pour que NPM puisse le comprendre.
  7. Convertissez le fichier que vous avez enregistré à l’étape 5 à l’aide de cette commande:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    rootcert ​​est le nom du fichier du certificat que vous avez enregistré à l'étape 5.
  8. Ouvrez le 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-papier.
  9. Nous allons maintenant coller ce contenu à la fin du groupe CA Cert créé à l'étape 1. Ouvrez donc le fichier 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 en dessous de ce que vous venez de coller)
  10. Copiez le fichier cabundle.pem enregistré dans un emplacement approprié. Par exemple, votre% userprofile% ou ~. Notez l'emplacement du fichier.
  11. Nous allons maintenant dire à npm/yarn d'utiliser le nouvel ensemble. Dans une ligne de commande, écrivez
    npm config set cafile **C:\Users\username\cacert.pem
    C:\Utilisateurs\nom d'utilisateur\cacert.pem est le chemin emprunté à l'étape 10.
  12. Facultatif: 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 fichier cabundle.pem et il comprendra également les HTTP.

4
sur

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

proxy de configuration $ npm " http://192.168.1.101:4128 "

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

où 192.168.1.101 est le proxy ip et 4128 le port. changer en fonction de vos paramètres de proxy. ça marche pour moi.

4
Pankaj

De nombreuses applications (par exemple, npm) peuvent utiliser un paramètre de proxy à partir de variables d’environnement utilisateur.

Vous pouvez simplement ajouter à votre environnement les variables suivantes HTTP_PROXY et HTTPS_PROXY qui avoir la même valeur pour chacun

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

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

How it looks on Windows

4

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

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

J'avais

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 ...

3
Acroneos

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

  1. Editez le fichier suivant C:\Users\<WIN_USERNAME>\.npmrc
  2. Exportez le certificat dans votre système de fichiers à 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

Maintenant, vous devriez être prêt à partir!

3
Marco

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

Il fonctionne enfin après que j’ai retiré accidentellement le préfixe http://. 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 tout ça, mais ça 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.

3
SkuraZZ

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 en ligne de commande via

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

puis essayez d’exécuter npm install. Par ceci, vous ne définissez pas le proxy dans .npmrc mais cela fonctionnera pour cette session.

3
SoSufi

Mon problème est tombé sur une erreur stupide de ma part. Comme j'avais rapidement déposé mes proxies dans un fichier Windows * .bat (http_proxy, https_proxy et ftp_proxy), j'ai oublié d'échapper aux caractères spéciaux du domaine à code utilisateur \% (% 5C) et au mot de passe comportant le point d'interrogation. '?' (% 3F). C'est-à-dire qu'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

Peut-être que c'est une affaire Edge, mais j'espère que cela aidera quelqu'un.

2

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

1
Govind Avireddi

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

Cela a fonctionné pour moi, espérons que cela fonctionnera pour vous :)

0
rufatZZ