npm install(コマンド)をプロキシの背後で動作させる方法はありますか?


266

.npmrcファイル内のプロキシ変数について読みますが、機能しません。すべての必要なパッケージを手動でダウンロードしてインストールすることを回避しようとします。

回答:


343

私はこの方法でこの問題を解決しました:

  1. 私はこのコマンドを実行します:

    npm config set strict-ssl false
  2. 次に、npmをhttpsではなくhttpで実行するように設定します。

    npm config set registry "http://registry.npmjs.org/"
  3. 次に、この構文を使用してパッケージをインストールします。

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

username:passwordプロキシが認証を必要としない場合は、一部をスキップします

編集:私の友人は、HTTP_PROXYとHTTPS_PROXYの両方の環境変数を設定し、通常はnpm install expressコマンドを発行 することで、NPMをプロキシの背後で機能させることができると指摘しました(たとえば)

EDIT2:@BStruthersがコメントしたように、「@」を含むパスワードは正しく解析されないことに注意してください。@を含む場合、パスワード全体を引用符で囲みます。


7
パスワードに「@」が含まれている場合、npmはプロキシ設定を正しく解析しません。潜在的な回避策は、npm設定に偽のユーザー名:パスワードを配置し、ローカルプロキシ(フィドラーなど)を使用して、リクエストのProxy-Authorizationヘッダーを修正して、正しいユーザー名:パスワードを設定することです。Proxy-Authorizationに保存されているusername:passwordはbase64でエンコードされていることに注意してください。
BStruthers 2013年

14
パスワードに@記号が含まれている場合は、ユーザー名とパスワードを引用符で囲んで渡すことができます。
アブサンドマインドウェブスミス2013

9
パスワードには特殊文字を含めることができますが、URLエンコードする必要があります。したがって、パスワードがのmy@password場合、.npmrcファイルmy%40passwordにはパスワードの部分が必要です。引用符で囲むとうまくいく場合もありますが、エンコードするのは簡単です。
Chris Jaynes、2014

1
別の落とし穴!以前にシステム変数HTTP-PROXYを設定している場合は、それらをクリアしてください。
Sydwell

1
あなたの伝説!私はnpmを仕事で働かせようとするのをあきらめましたが、これでようやく解決しました。
tamj0rd2

308

npmプロキシの設定

の場合HTTP

npm config set proxy http://proxy_host:port

の場合HTTPS

httpsプロキシアドレスがある場合は使用する

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

それ以外の場合は、httpプロキシアドレスを再利用します

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

:HTTPSプロキシを持っていないhttpsプロトコルとして、しかしhttp


9
SOCKSサポートなし?
grm 2013

57
https-proxyにはプロトコルとして「https」がなく、「http」があることに注意してください。これを変更することで問題が解決しました。
peterhil 2013年

3
@peterhilそのヒントをありがとう。クレイジーですが、「https」でこれを解決するのに何時間も費やしました。なぜこれがこのように機能するのか考えていますか?
Manoj NV 2014

2
@ManojNV、プロキシサーバーへの接続は暗号化されません。これはHTTPSをプロキシサーバーと通信するのではなく、HTTPを通信するだけです。ペイロードは、クライアントと宛先サーバー間のSSLです。プロキシサーバーへのHTTPSの場合は、暗号化/復号化が2回行われます。
ジェイミー

1
微妙。どうもありがとう@peterhil
Alec Breton

104

疑わしい場合は、私が行うように、これらのコマンドをすべて試してください。

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

=======

更新

あなたの設定を入れ~/.bashrcたり~/.bash_profileしますので、設定を心配する必要はありませんあなたは新しいターミナルウィンドウを開き、毎回!

あなたの会社が私のようなものであれば、私はかなり頻繁にパスワードを変更しなければなりません。だから私は〜/ .bashrcまたは〜/ .bash_profileに以下を追加して、ターミナルを開くたびにnpmが最新であることを確認します!

  1. 次のコードを~/.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. 次に、貼り付けたコードの「username」、「password」、および「proxy」フィールドを編集します。

  3. 新しいターミナルを開く

  4. 実行して設定を確認npm config listし、cat ~/.npmrc

  5. を使用してモジュールをインストールしてみてください

    • npm install __、または
    • npm --without-ssl --insecure install __、または
    • を使用してプロキシ設定を上書きしますnpm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __
    • モジュールをグローバルに利用できるようにするには、オプションを追加します -g

3
最後のコマンドは私のために働いた。それ以前のすべてが失敗しました
foecum

3
私はこのfu *** ingプロキシ構成に関する50の回答を読みました...機能したのはあなたの回答でした...ありがとう!!!
ロレンツォ

4
みんなありがとう!!うまくいきました。これは仕事で大きな頭痛の種だったので、私は他の人を助けることができてうれしいです:P
ケイティ

2
+1。これは機能します。私はcommands-使用npm config set registry http://registry.npmjs.org/npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080npm config set strict-ssl falseNPM設定のために、次に使用してNPMパッケージをインストールnpm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 --without-ssl --insecure -g install {packagename}。ありがとう
Atur

1
3日間試してみたところ、このソリューションはうまくいきました。
Mohan Singh

33

.npmrcファイルの代わりにコマンドラインオプションを試しましたか?

私のようなものがnpm --proxy http://proxy-server:8080/ install {package-name}うまくいったと思います。

以下も見ました: npm config set proxy http://proxy-server:8080/


+1私は他の人を試してみましたこれは私のために働いたものでした。レナート・ガマからの認証部分と
winner_joiner

20

すでに多くの良いアドバイスがありますが、私の環境(Windows 7、PowerShellを使用)およびnode.js(v8.1.2)の利用可能な最新バージョンでは、brunowego設定に従った場合を除いて、上記のすべてが機能しませんでした。

だからあなたの設定を確認してください:

npm config list

プロキシの背後にある設定:

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

これが誰かに時間を節約することを願っています


プロキシアドレスを見つけるにはどうすればよいですか?
Robin

@Robinある方法では、Windowsを使用している場合、IEはそれらを保存します。IEの下に移動し、接続中のLAN設定を表示すると、そこに表示されます。
eaglei22 2018

もちろん、@ Robinはブラウザーに依存しますが、通常は設定下にあります
Carmine Tambascia、

@Robinの設定で、ブラウザのプロキシ設定を確認/確認してください。通常、.pacを含むファイルがあり、最後のlikeは次のようになります。PROXYYourProxyAdress:PORT
Carmine Tambascia

17

これはWindowsでは私にとってはうまくいきます:

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

ドメインに属していない場合は、次を使用します。

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

パスワードのような特殊文字が含まれている場合は"@:というように、そのURLエンコードされた値によってそれらを交換。たとえば、"-> %22@-> %40:-> %3Aです。%5C文字に使用されます\


6
アドバイスをありがとう、これは私のために働いた。ctrl + shift + jと入力してjavascriptコンソールを開き、タイプencodeURIComponent("YourP@ssword")してパスワードのエンコードされたバージョンを取得できます。
jaggedsoft 2016

15

httpプロキシをセットアップするには、-gフラグを設定します。

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

httpsプロキシの場合は、-gフラグが設定されていることを再度確認します。

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


-gの意味は何ですか?
デビッド

1
ローカルインストールではなく、グローバルに設定します
Andrei


8

これは私のために働きました

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 ~/.npmrcLinuxマシンで次を追加します。registry多くの場合失敗の原因となるため、部品を追加することを忘れないでください。

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

2
多くのプロキシはhttpsリクエストのトンネリングをサポートしていますが、自分へのhttps接続は処理しません。そのため、問題が発生した場合は、変更https-proxy=https://..してみてくださいhttps-proxy=http://..
YoYo

7

最後に、AD認証のプロキシの背後にあるこの問題を解決することができました。私は実行しなければなりませんでした:

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

バックスラッシュや#などの特殊文字をURLエンコードすることは非常に重要です。私の場合、エンコードする必要がありました。

  1. backshlash%5C domain\user willdomain%5Cuser
  2. #記号%23%0Aのようなので、パスワードはPassword#2なりますPassword%23%0A2

以下の設定も追加しました:

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

6

私は設定でプロキシを設定しましたが、問題は解決されませんでしたが、この後私はうまくいきました:

npm --https-proxy http://XX.AA.AA.BB:8080 cordova-pluginsをインストールします

npm --proxy http://XX.AA.AA.BB:8080インストール


これは私にとってはうまくいき、他の変更はありません。コマンドウィンドウを開いて上記を使用すると機能します
AKS

6

これらのオプションをすべて試しましたが、なんらかの理由でプロキシに何もありませんでした。その後、絶望/絶望から生まれcurl、Git Bashシェルをランダムに試しましたが、うまくいきました。

を使用してすべてのプロキシオプションの設定を解除する

npm config rm proxy
npm config rm https-proxy

そしてnpm install、私のGit Bashシェルで実行すると完全に機能しました。プロキシ用に正しく設定されているかどうかはわかりませんが、Windows cmdプロンプトは正しくありませんが、機能しました。


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

これは私の問題を解決しました。


重要なことは、レジストリへのリンクを変更することでした。以前はhttpsでしたが、httpリンクにする必要がありました。
Alex Fainshtein

6

最後にさまざまな回答をまとめた後、@ Kayvar Answersの最初の4行は問題の解決に役立ちます。

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

C:\ Users \ .npmrcで.npmrcを見つけてみてください

次に、(メモ帳)を開き、書き込み、内部に保存します。

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

PS:「<」と「>」を削除してください!!


5

私にとっては、Pythonなどはすべて機能しますが、企業のプロキシnpmは機能しません。

私は試した

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/

指示どおりに、同じエラーが発生し続けました。

npm install electron --save-devが機能したのは、.npmrcファイルから削除 https-proxy https://proxyccc.xxx.ca:8080したときだけでした


1
あなたhttps-proxyはおそらくそうではありませんhttps:。少なくとも、それぞれに同じポートを使用することはおそらく正しくありませんが、両方ともおそらく同じ値を持っていると思います。
toddkaufmann 2017年

5

Windowsシステムの場合

プロキシとレジストリ設定を削除してみて(既に設定されている場合)、コマンドラインで環境変数を設定します。

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

次に、npm installを実行してみてください。これにより、プロキシを.npmrcに設定しませんが、そのセッションに対しては機能します。


これでうまくいきました。等号は、すべてが機能するように思われたものです。その前は使用してSET HTTP_PROXY http://username:password@domain:portいたが、切り替えてSET HTTP_PROXY=http://username:password@domain:portすべてが機能するように見えた
Dib

4

cmdまたはGIT Bashまたはその他のプロンプトで以下のコマンドを使用します

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

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

ここで、192.168.1.101はプロキシIPで、4128はポートです。プロキシ設定に従って変更します。私にとってはその作品。


1
認証にドメインを使用する必要があり、エスケープされたバックスラッシュを使用しました:この文字列%5Cを使用します。いよいよ上手くいきました!
フランチェスコ


4

私の場合、設定ファイル(C:\ Users \ [USERNAME] \ .npmrcにあります)のプロキシアドレスに "http://"を設定するのを忘れていました。だからではなく

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

持っていた

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

もちろんどちらはうまくいきませんでしたが、エラーメッセージはあまり役に立ちませんでした...


4

この質問については、多くの回答がありましたが、どれもうまくいきませんでした。それらのすべては、http://プレフィックスを追加すると述べた。だから私もそれを追加しました。すべて失敗しました。

私が誤ってhttp://プレフィックスを削除した後、それは最終的に動作します。最終的な設定は次のようになります:

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

私はこれの背後にある論理を知りませんが、それはうまくいきました。上記の回答のいずれもうまくいかない場合は、おそらくこの方法を試すことができます。これがお役に立てば幸いです。


4

SSLと証明書の問題に関する curlのページに適切な情報があります。私の答えのほとんどはそこの情報に基づいています。

strict-ssl falseを使用することは悪い習慣であり、問​​題を引き起こす可能性があります。代わりに、 "中間者"証明書によって挿入される証明書を追加することができます。

Windowsでこれを解決する方法:

  1. MozillaのCAバンドルに基づいて、curlからCA証明書をダウンロードします。curlの「firefox-db2pem.sh」シェルスクリプトを使用して、ローカルのFirefoxデータベースを変換することもできます。
  2. httpsを使用してWebページに移動します(例:ChromeまたはInternet ExplorerのStackoverflow)
  3. ロックアイコンをクリックし、[証明書を表示]またはChromeで[有効]をクリックします
  4. 認定パスに移動します。一番上の証明書、つまりルート証明書は、抽出する証明書です。その証明書をクリックし、「証明書を表示」
  5. 2番目のタブ「詳細」をクリックします。「ファイルにコピー」をクリックします。DER形式を選択し、ファイルの保存場所をメモします。rootcert.cerなどの適切なファイル名を選択します
  6. Gitがインストールされている場合は、openssl.exeがあります。それ以外の場合は、この段階でgit for windowsをインストールします。ほとんどの場合、openssl実行可能ファイルはC:\ Program Files \ git \ usr \ bin \ openssl.exeにあります。opensslを使用して、NPMが理解するために必要なPEM形式にファイルを変換します。
  7. :あなたは、このコマンドを使用して、手順5で保存したファイルの変換rootcertは、手順5で保存した証明書のファイル名です。
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
  8. テキストエディターでoutcert.pemを開きます。メモ帳ではなく、行末を理解するのに十分スマートです。すべてのテキストを選択してクリップボードにコピーします。
  9. 次に、そのコンテンツをステップ1で作成したCA Certバンドルの最後に貼り付けます。したがって、高度なテキストエディターcacert.pemを開きます。ファイルの最後に移動し、前の手順の内容をファイルの最後に貼り付けます。(貼り付けたものの下の空の行を保持します)
  10. 保存したcabundle.pemを適切な場所にコピーします。たとえば、%userprofile%または〜です。ファイルの場所を書き留めます。
  11. 次に、npm / yarnに新しいバンドルを使用するように指示します。コマンドラインで
    npm config set cafile **C:\Users\username\cacert.pem
    C:\ Users \ username \ cacert.pemが手順10からのパスであるところを書きます
  12. オプション:strict-sslを再度オンにします。 npm config set strict-ssl true

ふew!着いた!これで、npmは接続方法を理解できます。ボーナスは、同じcabundle.pemを使用するようにcurlに指示でき、HTTPも理解することです。


3

私が従った手順は次のとおりです(Windows)。

  1. 次のファイルを編集します C:\Users\<WIN_USERNAME>\.npmrc
  2. 次のアドレスから証明書をファイルシステムにエクスポートします。https//registry.npmjs.org

  3. エクスポートされた証明書の場所に移動し、次のコマンドを発行します。

    npm config set cafile npm_certificate.cer

  4. 次の変更をファイルに追加します。 registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer

これで準備完了です。


2

私の問題は私の側の愚かな間違いに帰着しました。ある日すぐにプロキシをWindows * .batファイル(http_proxy、https_proxy、およびftp_proxy)にドロップしたため、URLエンコードされたドメイン\ユーザー(%5C)の特殊文字と疑問符のあるパスワードをエスケープするのを忘れました「?」(%3F)。つまり、コード化されたコマンドを取得したら、bat fileコマンドの「%」をエスケープすることを忘れないでください。

私が変更され

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

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

多分それはエッジケースですが、うまくいけば誰かを助けるでしょう。


1

プロキシ設定でhttp / httpプレフィックスを付けずに指定すると、プロキシホストとポートが正しい値であってもnpmが失敗しました。プロトコルプレフィックスを追加した後でのみ機能しました。


0

ただ、新しいターミナルを開き、入力npm config editnpm config -g edit。既定値にリセット。そのcloseターミナルの後に、新しいターミナルを開き、npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>グローバルに追加する必要がある場合は入力し-gます。

それは私のために働きました、それがあなたのためにうまくいくことを願っています:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.