Is there a way to make npm install work behind a proxy? I tried changing the proxy variable in the .npmrc file but it didn't work. I'm trying to avoid doing a manual download.
33 Answers
Setup npm proxy
For HTTP:
npm config set proxy http://proxy_host:port For HTTPS:
use the https proxy address if there is one
npm config set https-proxy https://proxy.company.com:8080 else reuse the http proxy address
npm config set https-proxy http://proxy.company.com:8080 Note: The https-proxy doesn't have https as the protocol, but http.
6 Comments
npm config set registry "http://registry.npmjs.org/". It worked :)I solved this problem this way:
I run this command:
npm config set strict-ssl falseThen set npm to run with http, instead of https:
npm config set registry "http://registry.npmjs.org/"Then I install packages using this syntax:
npm --proxy http://username:[email protected]:80 install packagename
Skip the username:password part if proxy doesn't require you to authenticate
EDIT: A friend of mine just pointed out that you may get NPM to work behind a proxy by setting BOTH HTTP_PROXY and HTTPS_PROXY environment variables, then issuing normally the command npm install express (for example)
EDIT2: As @BStruthers commented, keep in mind that passwords containing "@" wont be parsed correctly, if contains @ put the entire password in quotes
17 Comments
my@password, your .npmrc file should have my%40passwordfor the password part. Putting it in quotes works in some cases, but encoding it is foolproof.When in doubt, try all these commands, as I do:
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
Put your settings into ~/.bashrc or ~/.bash_profile so you don't have to worry about your settings everytime you open a new terminal window!
If your company is like mine, I have to change my password pretty often. So I added the following into my ~/.bashrc or ~/.bash_profile so that whenever I open a terminal, I know my npm is up to date!
Simply paste the following code at the bottom of your
~/.bashrcfile:###################### # 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" > ~/.curlrcThen edit the "username", "password", and "proxy" fields in the code you pasted.
Open a new terminal
Check your settings by running
npm config listandcat ~/.npmrcTry to install your module using
npm install __, ornpm --without-ssl --insecure install __, or- override your proxy settings by using
npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __. - If you want the module to be available globally, add option
-g
10 Comments
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 for npm config and then installed npm package using npm --proxy http://myusername:[email protected]:8080 --without-ssl --insecure -g install {packagename}. ThanksThough there are already many good advice, for my environment(Windows 7, using PowerShell) and the last version available of node.js ( v8.1.2 ) all the above did not worked, except when I followed brunowego settings.
So check your settings with :
npm config list Settings behind a 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 Hope this will save time to someone
6 Comments
This works for me in Windows:
npm config set proxy http://domain%5Cuser:pass@host:port If you are not in any domain, use:
npm config set proxy http://user:pass@host:port If your password contains special characters such as ",@,: and so on, replace them by their URL encoded values. For example "->%22, @->%40, :->%3A. %5C is used for the character \.
3 Comments
encodeURIComponent("YourP@ssword") to get the encoded version of your password.To setup the http proxy have the -g flag set:
sudo npm config set proxy http://proxy_host:port -g
For https proxy, again make sure the -g flag is set:
sudo npm config set https-proxy http://proxy_host:port -g
3 Comments
Finally i have managed to solve this problem being behinde proxy with AD authentication. I had to execute:
npm config set proxy http://domain%5Cuser:password@proxy:port/ npm config set https-proxy http://domain%5Cuser:password@proxy:port/ It is very important to URL encode any special chars like backshlash or # In my case i had to encode
backshlashwith %5C sodomain\user willbedomain%5Cuser#sign with%23%0Aso password likePassword#2will bePassword%23%0A2
I have also added following settings:
npm config set strict-ssl false npm config set registry http://registry.npmjs.org/ 1 Comment
This worked for me-
npm config set proxy http://proxy.company.com:8080 npm config set https-proxy http://proxy.company.com:8080 npm set strict-ssl=false 1 Comment
Though i set proxy with config, problem was not solved but after This one worked for me:
npm --https-proxy http://XX.AA.AA.BB:8080 install cordova-plugins
npm --proxy http://XX.AA.AA.BB:8080 install
1 Comment
vim ~/.npmrc in your Linux machine and add following. Don't forget to add registry part as this cause failure in many cases.
proxy=http://<proxy-url>:<port> https-proxy=https://<proxy-url>:<port> registry=http://registry.npmjs.org/ 1 Comment
https-proxy=https://.. into https-proxy=http://..npm config set proxy <http://...>:<port_number> npm config set registry http://registry.npmjs.org/ This solved my problem.
1 Comment
I tried all of these options, but my proxy wasn't having any of it for some reason. Then, born out of desparation/despair, I randomly tried curl in my Git Bash shell, and it worked.
Unsetting all of the proxy options using
npm config rm proxy npm config rm https-proxy And then running npm install in my Git Bash shell worked perfectly. I don't know how it's set up correctly for the proxy and the Windows cmd prompt isn't, but it worked.
Comments
On Windows system
Try removing the proxy and registry settings (if already set) and set environment variables on command line via
SET HTTP_PROXY=http://username:password@domain:port SET HTTPS_PROXY=http://username:password@domain:port then try to run npm install. By this, you'll not set the proxy in .npmrc but for that session it will work.
1 Comment
SET HTTP_PROXY http://username:password@domain:port but switching to SET HTTP_PROXY=http://username:password@domain:port seemed to get everything workingIn my case, I forgot to set the "http://" in my config files (can be found in C: \Users \ [USERNAME] \ .npmrc) proxy adresses. So instead of having
proxy=http://[IPADDRESS]:[PORTNUMBER] https-proxy=http://[IPADDRESS]:[PORTNUMBER] I had
proxy=[IPADDRESS]:[PORTNUMBER] https-proxy=[IPADDRESS]:[PORTNUMBER] Which of course did not work, but the error messages didnt help much either...
Comments
After tying different answers finally, @Kayvar answers's first four lines help me to solve the issue:
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 Comments
This worked for me. Set the http and https proxy.
- npm config set proxy http://proxy.company.com:8080
- npm config set https-proxy http://proxy.company.com:8080
Comments
For me even though python etc will all work though our corporate proxy npm would not.
I tried
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/
as instructed but kept getting the same error.
It was only when I removed https-proxy https://proxyccc.xxx.ca:8080 from the .npmrc file that npm install electron --save-dev worked
1 Comment
https-proxy is probably not https:. At least, having the same port for each is probably not correct, but I think they both probably have the same value.Here are the steps that I've followed (Windows):
- Edit the following file
C:\Users\<WIN_USERNAME>\.npmrc Export the certificate to your file system from the following address:https://registry.npmjs.org
Navigate to the exported certificate location and issue the following command:
npm config set cafile npm_certificate.cerAdd the following changes to the file:
registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer
Now you should be ready to go!
1 Comment
There is good information on curl's page on SSL and certificate issues. I base most of my answer on the information there.
Using strict-ssl false is bad practice and can create issues. What we can do instead is add the certificate that is being injected, by the "man in the middle" certificate.
How to solve this on Windows:
- Download the CA Certificates from curl based on Mozilla's CA bundle. You can also use curl's "firefox-db2pem.sh" shellscript to convert your local Firefox database.
- Go to a webpage using https, for example Stackoverflow in Chrome or Internet Explorer
- Click the lock icon, click View certificates or "Valid" in Chrome
- Navigate to the Certification path. The top certificate, or the root certificate is the one we want to extract. Click that certificate and then "view certificate"
- Click the second tab, "Details". Click "Copy to file". Pick the DER format and make note of where you save the file. Pick a suitable filename, like rootcert.cer
- If you have Git installed you will have openssl.exe. Otherwise, install git for windows at this stage. Most likely the openssl executable will be at C:\Program Files\git\usr\bin\openssl.exe. We will use openssl to convert the file to the PEM format we need for NPM to understand it.
- Convert the file you saved in step 5 by using this command:
openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
where rootcert is the filename of the certificate you saved in step 5. - Open the outcert.pem in a text-editor smart enough to understand line-endings, so not notepad.
- Find -----BEGIN CERTIFICATE----- lots of characters -----END CERTIFICATE----- and copy all text between them and also including the BEGIN / END lines
- Now we will paste that content to the end of the CA Cert bundle made in step 1. So open the cacert.pem in your advanced texteditor. Go to the end of the file and paste the content from previous step to the end of file. (Preserve the empty line below what you just pasted)
- Copy the saved cabundle.pem to a suitable place. Eg your %userprofile% or ~. Make note of the location of the file.
- Now we will tell npm/yarn to use the new bundle. In a commandline, write
npm config set cafile **C:\Users\username\cacert.pem**
where C:\Users\username\cacert.pem is the path from step 10. - Optionally: turn on strict-ssl again,
npm config set strict-ssl true
Phew! We made it! Now npm can understand how to connect. Bonus is that you can tell curl to use the same cabundle.pem and it will also understand HTTPs.
1 Comment
echo | openssl s_client -showcerts -servername www.domain.com -connect www.domain.com:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cacert.crt to get the crt file first; And then generate the pem file via: openssl x509 -inform PEM -in cacert.crt -out cert.pem -text; And add pem file into npm cafile via: npm config set cafile /path/to/cert.permUse below command at cmd or GIT Bash or other prompt
$ npm config set proxy "http://192.168.1.101:4128"
$ npm config set https-proxy "http://192.168.1.101:4128"
where 192.168.1.101 is proxy ip and 4128 is port. change according to your proxy settings. its works for me.
1 Comment
A lot of applications (e.g. npm) can use proxy setting from user environment variables.
You can just add to your environment following variables HTTP_PROXY and HTTPS_PROXY that will have the same value for each one
http://user:password@proxyAddress:proxyPort
For example if you have Windows you can add proxy as follow:
Comments
There has been many answers above for this question, but none of those worked for me. All of them mentioned to add http:// prefix. So I added it too. All failed.
It finally works after I accidentally removed http:// prefix. Final config is like this:
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 I don't know the logic behind this, but it worked. If none of answers above works for you, maybe you can have a try on this way. Hope this one is useful.
Comments
Just open the new terminal and type npm config edit and npm config -g edit. Reset to defaults. After that close terminal, open the new one and type npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package> if you need globally just add -g.
It worked for me, hope it`ll work for you :)
Comments
My issue came down to a silly mistake on my part. As I had quickly one day dropped my proxies into a windows *.bat file (http_proxy, https_proxy, and ftp_proxy), I forgot to escape the special characters for the url-encoded domain\user (%5C) and password having the question mark '?' (%3F). That is to say, once you have the encoded command, don't forget to escape the '%' in the bat file command.
I changed
set http_proxy=http://domain%5Cuser:password%3F@myproxy:8080 to
set http_proxy=http://domain%%5Cuser:password%%3F@myproxy:8080 Maybe it's an edge case but hopefully it helps someone.
Comments
Following Marco's answer, it worked for me. Sharing the .npmrc configuration that worked for me:
Download the certificate from https://registry.npmjs.org/ and save it in
C:\Users\USER_NAME\Desktop\Edit
.npmrcconfig file located at:C:\Users\USER_NAME\.npmrcPut the following in the
.npmrcfile
registry=https://registry.npmjs.org/ cafile=C:\Users\USER_NAME\Desktop\registry.npmjs.org.crt strict-ssl=false https-proxy=http://proxy.host.internal.net:8090/ (update the path at line 2 and url:port at line 4)
- Download the package to your local from it's github - you can use
npm packto repack it intotar.gznpm package - Use
npm install <package.tar.gz>to install the package
