Proxy arkasında çalışmak için npm install (komut) yapmanın bir yolu var mı?


266

Bir .npmrcdosyadaki proxy değişkeni hakkında bilgi edinin , ancak çalışmaz. Tüm gerekli paketleri manuel olarak indirmekten ve yüklemekten kaçınmaya çalışmak.

Yanıtlar:


343

Bu sorunu şu şekilde çözdüm:

  1. Bu komutu çalıştırın:

    npm config set strict-ssl false
  2. Ardından, npm'yi https yerine http ile çalışacak şekilde ayarlayın:

    npm config set registry "http://registry.npmjs.org/"
  3. Sonra bu sözdizimini kullanarak paketleri yüklerim:

    npm --proxy http://username:password@cacheaddress.com.br:80 install packagename

username:passwordProxy kimlik doğrulaması yapmanızı gerektirmiyorsa parçayı atlayın

DÜZENLEME: Bir arkadaşım, BOTH HTTP_PROXY ve HTTPS_PROXY ortam değişkenlerini ayarlayarak NPM'nin bir proxy arkasında çalışabileceğini , ardından normalde npm install express komutunu verebileceğini belirtti (örneğin)

EDIT2: @BStruthers yorum gibi, @ @ içeren parolaların doğru ayrıştırılamayacağını unutmayın, eğer @ @ tüm parolayı tırnak içine koymak


7
Dikkat edin, şifreniz "@" npm içeriyorsa proxy ayarınızı doğru şekilde ayrıştırmaz. Olası bir geçici çözüm, npm config'te sahte bir kullanıcı adı: şifre koymak ve isteğin Proxy-Authorization başlığını doğru kullanıcı adı: şifresine sahip olacak şekilde değiştirmek için yerel bir proxy kullanmaktır (kemancı gibi). Proxy-Authorization'da depolanan kullanıcı adı: şifresinin base64 kodlu olduğunu unutmayın.
BStruthers

14
Parolanız @ simgesi içeriyorsa, kullanıcı adınızı ve parolanızı tırnak içine alarak şifrenizi iletebilirsiniz.
absynthe fikirli web smith

9
Şifrenizde özel karakterler olabilir, ancak URL ile kodlanmış olmaları gerekir. Parolanız my@passwordbuysa, .npmrc dosyanızın my%40passwordparola kısmı için olması gerekir . Tırnak içine koymak bazı durumlarda işe yarar, ancak kodlamak kusursuzdur.
Chris Jaynes

1
Başka bir yakaladım! Önceden ayarlanmış sistem değişkenleriniz varsa HTTP-PROXY bunları temizlediğinizden emin olun!
Sydwell

1
Efsane! İş yerinde çalışmak için npm almaya çalışırken vazgeçmiştim, ama bu sonunda çözdü.
tamj0rd2

308

Proxy'yi npmkur

Şunun için HTTP:

npm config set proxy http://proxy_host:port

Şunun için HTTPS:

varsa https proxy adresini kullanın

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

http proxy adresini tekrar kullanın

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

Not : https-proxy'nin httpsprotokolü yoktur, ancak http.


9
SOCKS desteği yok mu?
grm

57
Https-proxy'nin protokol olarak 'https' değil, 'http' olduğunu unutmayın. Bunu değiştirmek benim için problemi çözdü.
peterhil

3
@peterhil Bu ipucu için teşekkürler. Çılgınca ama bunu "https" ile çözmek için saatler harcadım. Neden böyle çalıştığı hakkında bir fikrin var mı?
Manoj NV

2
@ManojNV, proxy sunucusuna bağlantı şifreli değil. Proxy sunucusuyla HTTPS konuşmakla kalmıyor, sadece HTTP. Yük, istemci ve hedef sunucu arasındaki SSL'dir. Proxy sunucusuna HTTPS olsaydı, işler iki kez şifrelenir / şifresi çözülürdü.
Jamie

1
İnce. Teşekkürler çok @peterhil
Alec Breton

104

Şüphe duyduğum gibi, tüm bu komutları deneyin:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false
set HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
set HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export http_proxy=http://myusername:mypassword@proxy.us.somecompany:8080

npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 \
--without-ssl --insecure -g install

=======

GÜNCELLEME

Yeni bir terminal penceresi açtığınızda ayarlarınızı endişelenmenize gerek kalmayacak şekilde ayarlarınızı yapın ~/.bashrcveya ~/.bash_profileekleyin!

Şirketiniz benimki gibi ise, şifremi sık sık değiştirmem gerekiyor. Bu yüzden ~ / .bashrc veya ~ / .bash_profile içine aşağıdakileri ekledim, böylece bir terminal açtığımda npm'imin güncel olduğunu biliyorum!

  1. Aşağıdaki kodu ~/.bashrcdosyanızın altına yapıştırmanız yeterlidir :

    ######################
    # 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. Ardından yapıştırdığınız koddaki "kullanıcı adı", "şifre" ve "proxy" alanlarını düzenleyin.

  3. Yeni bir terminal açın

  4. Ayarlarınızı çalıştırarak kontrol edin npm config listvecat ~/.npmrc

  5. Modülünüzü kullanarak

    • npm install __veya
    • npm --without-ssl --insecure install __veya
    • kullanarak proxy ayarlarınızı geçersiz kılın npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __.
    • Modülün global olarak kullanılabilir olmasını istiyorsanız, seçenek ekleyin -g

3
Son komut benim için çalıştı. Bundan önce olanlar başarısız oldu
foecum

3
Bu fu *** ing proxy yapılandırması ile ilgili yaklaşık 50 cevap okudum ... işe yaradı tek cevap oldu ... teşekkür ederim !!!
Lorenzo

4
Teşekkürler beyler!! Çalıştığına sevindim! Bu iş yerinde büyük bir baş ağrısı oldu, bu yüzden başkalarına yardım edebilirim sevindim: P
Katie

2
+1. Bu çalışıyor. Ben Commands kullanılan npm config set registry http://registry.npmjs.org/, npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080, npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080, npm config set strict-ssl falsenpm config ve ardından yüklü npm paketinin kullanılması için npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 --without-ssl --insecure -g install {packagename}. Teşekkürler
Atur

1
Üç gün denedikten sonra bu çözüm benim için çalıştı.
Mohan Singh

33

.npmrcDosya yerine komut satırı seçeneklerini denediniz mi?

Sanırım npm --proxy http://proxy-server:8080/ install {package-name}bana benzer bir şey işe yaradı.

Ayrıca aşağıdakileri de gördüm: npm config set proxy http://proxy-server:8080/


+1 diğerleri için çalıştı bu benim için çalıştı biriydi. Renato Gama'dan auth kısmı ile
winner_joiner

20

Zaten çok iyi bir tavsiye olmasına rağmen, ortamım (Windows 7, PowerShell kullanarak) ve node.js'nin (v8.1.2) mevcut son sürümü için, brunowego ayarlarını takip ettiğim zaman, yukarıdakilerin hepsi işe yaramadı .

Bu nedenle ayarlarınızı şunlarla kontrol edin:

npm config list

Proxy arkasındaki ayarlar:

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

Umarım bu birine zaman kazandırır


proxy adresimi nasıl bulurum?
Robin

@Robin Tek yönlü, eğer windows kullanıyorsanız, IE onları saklar. IE altına gidebilir ve bağlantı altında LAN ayarlarını görüntüleyebilirsiniz ve orada gösterecektir.
eaglei22

@Robin elbette tarayıcıya bağlı, ancak genellikle ayarlar altında
Carmine Tambascia

@Ayarlar altındaki tarayıcılarda proxy ayarını görmeniz / kontrol etmeniz gerekir. Genellikle .pac ile son dosya olması gereken yerde bir dosya vardır: PROXY
YourProxyAdres

17

Windows'da benim için çalışıyor:

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

Herhangi bir alan adında değilseniz, şunu kullanın:

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

Şifreniz gibi özel karakterler içeriyorsa ", @, :ve benzerleri, bunların URL kodlu değerleriyle değiştirin. Örneğin "-> %22, @-> %40, :-> %3A. %5Ckarakter için kullanılır \.


6
Tavsiye için teşekkürler, bu benim için çalıştı. Javascript konsolunuzu ctrl + shift + j ile açabilir ve encodeURIComponent("YourP@ssword")şifrenizin kodlanmış sürümünü alabilirsiniz.
jaggedsoft

15

Http proxy'yi kurmak için -g bayrağı ayarlanmıştır:

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

Https proxy'si için tekrar -g bayrağının ayarlandığından emin olun :

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


-g'nin anlamı nedir?
David

1
yerel kurulum için değil, küresel olarak kurar
Andrei

8
$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port

1
Lütfen yorum ekleyin.
Max

8

Bu benim için çalıştı-

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
npm set strict-ssl=false

7

vim ~/.npmrcekleyin ve aşağıdakileri ekleyin. registryBirçok durumda arızaya neden olduğu için bir parça eklemeyi unutmayın .

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

2
Birçok proxy, https isteklerini tünellemeyi destekler, ancak kendileriyle bir https bağlantısını işlemezler. Bu nedenle, sorun https-proxy=https://..https-proxy=http://..
YoYo

7

Sonunda ben AD kimlik doğrulaması ile behinde proxy olmak bu sorunu çözmeyi başardılar. Yürütmek zorunda kaldım:

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

URL, backshlash veya # gibi özel karakterleri kodlamak çok önemlidir. Benim durumumda kodlamak zorunda kaldım

  1. backshlash% 5C domain\user williledomain%5Cuser
  2. #%23%0Agibi şifre ile imzalamak Password#2olacakPassword%23%0A2

Ayrıca aşağıdaki ayarları ekledim:

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


6

Tüm bu seçenekleri denedim, ancak proxy'm herhangi bir nedenden dolayı sahip değildi. Sonra, umutsuzluk / umutsuzluktan doğdum, curlGit Bash kabuğumda rastgele denedim ve işe yaradı.

Kullanarak tüm proxy seçeneklerinin ayarını kaldırma

npm config rm proxy
npm config rm https-proxy

Ve sonra npm installGit Bash kabuğumda koşmak mükemmel çalıştı. Proxy için nasıl doğru ayarlandığını bilmiyorum ve Windows cmdistemi değil, ama işe yaradı.


6
npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/

Bu benim sorunumu çözdü.


Önemli olan kayıt defteri bağlantısını değiştirmekti: https yerine daha önce http linkine sahiptim.
Alex Fainshtein

6

Sonunda farklı cevaplar bağladıktan sonra, @Kayvar cevaplarının ilk dört satırı sorunu çözmeme yardımcı oluyor:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false


5

.Npmrc dosyasını C: \ Users \ .npmrc dizininde bulmaya çalışın

sonra açın (not defteri), yazın ve kaydedin:

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

Not: "<" ve ">" lütfen kaldırın !!


5

Benim için kurumsal proxy npm olmasa da python vb tüm çalışacak olsa bile benim için.

denedim

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/

belirtildiği gibi aynı hatayı almaya devam etti.

Sadece npm yükleme elektronu --save-dev çalıştı .npmrc dosyadan kaldırıldığında https-proxy https://proxyccc.xxx.ca:8080 oldu


1
Sizin https-proxymuhtemelen değildir https:. En azından, her biri için aynı bağlantı noktasına sahip olmak muhtemelen doğru değildir, ancak her ikisinin de muhtemelen aynı değere sahip olduğunu düşünüyorum.
toddkaufmann

5

Windows sisteminde

Proxy ve kayıt defteri ayarlarını (önceden ayarlanmışsa) kaldırmayı deneyin ve üzerinden komut satırında ortam değişkenlerini

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

sonra npm kurulumunu çalıştırmayı deneyin. Bu şekilde, proxy'yi .npmrc olarak ayarlamazsınız, ancak bu oturum için çalışır.


Bu benim için çalıştı. Her şeyin işe yaramasını sağlayan şey eşittir sembolüdür. Ondan önce sadece kullanıyordum SET HTTP_PROXY http://username:password@domain:portama geçiş yapmak SET HTTP_PROXY=http://username:password@domain:portherşeyi çalıştırıyor gibiydi
Dib

4

Cmd veya GIT Bash veya diğer istemlerde aşağıdaki komutu kullanın

$ npm config proxy ayarladı " http://192.168.1.101:4128 "

$ npm yapılandırma kümesi https-proxy " http://192.168.1.101:4128 "

burada 192.168.1.101 proxy ip ve 4128 bağlantı noktasıdır. proxy ayarlarınıza göre değiştirin. benim için çalışıyor.


1
Kimlik doğrulama için bir etki alanı kullanmak zorundayım ve bu eğik çizgi:% 5C bu dizeyle kaçtı. Sonunda işe yaradı!
Francesco


4

Benim durumumda, yapılandırma dosyalarımda "http: //" ayarını unuttum (C: \ Users \ [USERNAME] \ .npmrc dizininde bulunabilir) proxy adresleri. Yani sahip olmak yerine

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

sahiptim

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

Tabii ki işe yaramadı, ama hata mesajları da çok yardımcı olmadı ...


4

Bu soru için yukarıda birçok cevap vardı, ama bunların hiçbiri benim için çalışmadı. Hepsi http://önek eklemek için bahsedildi . Ben de ekledim. Hepsi başarısız oldu.

Sonunda yanlışlıkla http://öneki kaldırdıktan sonra çalışır . Son yapılandırma şöyle:

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

Bunun arkasındaki mantığı bilmiyorum, ama işe yaradı. Yukarıdaki yanıtlardan hiçbiri sizin için işe yaramazsa, belki de bu şekilde deneyebilirsiniz. Umarım bu faydalıdır.


4

Curl'un sayfasında SSL ve sertifika sorunları hakkında iyi bilgiler var . Cevabımın çoğunu oradaki bilgilere dayandırıyorum.

Sıkı ssl false kullanmak kötü bir uygulamadır ve sorun yaratabilir. Bunun yerine yapabileceğimiz, "ortadaki adam" sertifikası tarafından enjekte edilen sertifikayı eklemektir.

Windows'ta bu nasıl çözülür:

  1. Dan CA Sertifikalarını indirin kıvrılma Mozilla'nın CA paket dayalı. Yerel Firefox veritabanınızı dönüştürmek için curl'un "firefox-db2pem.sh" kabuk komut dosyasını da kullanabilirsiniz.
  2. Https kullanarak bir web sayfasına gidin, örneğin Chrome veya Internet Explorer'da Stackoverflow
  3. Kilit simgesini tıklayın, Sertifikaları görüntüle'yi veya Chrome'da "Geçerli" yi tıklayın
  4. Sertifika yoluna gidin. Üst sertifika veya kök sertifika almak istediğimiz sertifikadır. Bu sertifikayı tıklayın ve ardından "sertifikayı görüntüle"
  5. İkinci sekme olan "Ayrıntılar" ı tıklayın. "Dosyaya kopyala" yı tıklayın. DER biçimini seçin ve dosyayı nereye kaydettiğinizi not edin. Rootcert.cer gibi uygun bir dosya adı seçin
  6. Git yüklüyse openssl.exe'ye sahip olursunuz. Aksi takdirde, bu aşamada pencereler için git'i yükleyin. Büyük olasılıkla openssl yürütülebilir dosyası C: \ Program Files \ git \ usr \ bin \ openssl.exe konumunda olacaktır. Dosyayı NPM'nin anlaması için ihtiyacımız olan PEM formatına dönüştürmek için openssl kullanacağız.
  7. Bu komutu kullanarak 5. adımda kaydettiğiniz dosyayı dönüştürün:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    Burada rootcert , 5. adımda kaydettiğiniz sertifikanın dosya adıdır .
  8. Outcert.pem'i satır sonlarını anlayacak kadar akıllı bir metin düzenleyicide açın, bu yüzden not defteri değil. Tüm metni seçin ve panoya kopyalayın.
  9. Şimdi bu içeriği 1. adımda yapılan CA Cert paketinin sonuna yapıştıracağız. Dolayısıyla , gelişmiş texteditor'ınızda cacert.pem dosyasını açın. Dosyanın sonuna gidin ve içeriği önceki adımdan dosyanın sonuna yapıştırın. (Az önce yapıştırdıklarınızın altındaki boş satırı koruyun)
  10. Kaydedilen cabundle.pem dosyasını uygun bir yere kopyalayın. Örneğin,% kullanıcı profiliniz% veya ~. Dosyanın konumunu not edin.
  11. Şimdi npm / iplik'e yeni demeti kullanmasını söyleyeceğiz. Bir komut olarak, yazma
    npm config set cafile **C:\Users\username\cacert.pem
    burada C: \ Kullanıcılar \ adı \ cacert.pem Kademe 10 yoldur.
  12. İsteğe bağlı olarak katı ssl'yi tekrar açın, npm config set strict-ssl true

Uf! Başardık! Şimdi npm nasıl bağlanacağını anlayabilir. Bonus, curl'e aynı cabundle.pem'i kullanmasını söyleyebilir ve ayrıca HTTP'leri de anlayacaktır.


3

İzlediğim adımlar şunlardır (Windows):

  1. Aşağıdaki dosyayı düzenleyin C:\Users\<WIN_USERNAME>\.npmrc
  2. Sertifikayı aşağıdaki adresten dosya sisteminize aktarın: https://registry.npmjs.org

  3. Dışa aktarılan sertifika konumuna gidin ve aşağıdaki komutu verin:

    npm config set cafile npm_certificate.cer

  4. Dosyaya aşağıdaki değişiklikleri ekleyin: registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer

Şimdi gitmeye hazır olmalısın!


2

Benim sorunum aptalca bir hataya düştü. Bir gün hızlı bir şekilde proxy'leri Windows * .bat dosyasına (http_proxy, https_proxy ve ftp_proxy) düşürdüğüm için, url kodlu etki alanı \ kullanıcısı (% 5C) ve soru işaretine sahip şifre için özel karakterlerden kaçmayı unuttum '?' (% 3F). Yani, kodlanmış komuta sahip olduğunuzda, bat dosyası komutundaki '%' işaretinden kaçmayı unutmayın.

Değiştim

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

için

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

Belki bu bir son durumdur ama umarım birisine yardım eder.


1

Proxy ana bilgisayar ve bağlantı noktası doğru değerler olsa bile proxy ayarlarında http / http öneki olmadan verdiğimde npm başarısız oldu. Yalnızca protokol öneki eklendikten sonra çalıştı.


0

Sadece yeni bir terminal açıp yazın npm config editve npm config -g edit. Varsayılanlara dön. Bu yakın terminalden sonra yenisini açın ve npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>global olarak eklemeniz gerekiyorsa yazın -g.

Benim için çalıştı, umarım senin için çalışır :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.