web-dev-qa-db-ja.com

企業プロキシ.pacの背後でnpmを使用する

私はnpmを通していくつかのパッケージをダウンロードする必要がありますが、私たちの企業のプロキシ設定は.pacファイルです(私はウィンドウズにいます)。

私はすでに試しました

npm config set proxy http://mydomain\username:[email protected]:8181/proxy.pac
npm config set https-proxy http://mydomain\username:[email protected]:8181/proxy.pac

または

npm config set proxy http://1.2.3.4:8181/proxy.pac
npm config set https-proxy http://1.2.3.4:8181/proxy.pac

しかし、うまくいきません….

なにか提案を?ありがとう

133
Doc

私はプロキシサーバーの後ろでnpmを動かすことができないという非常によく似た問題を抱えています。

私のユーザー名は "domain\username"の形式です - プロキシ設定にスラッシュを含めるとスラッシュが表示されました。だからこれを入力:

npm config set proxy "http://domain\username:password@servername:port/"

その後、このnpm config get proxyを実行するとこれが返されます。 http://ドメイン/ユーザー名:パスワード@サーバー名:ポート/

したがって、問題を解決するために、代わりに円記号をURLエンコードしたので、次のように入力しました。

npm config set proxy "http://domain%5Cusername:password@servername:port/"

これでプロキシアクセスが修正されました。

173
Steve Roberts

Internet ExplorerのLAN設定でpacファイルのURLを探し、構成されているURLからpacファイルをダウンロードします。 pacファイルは、さまざまなシナリオでさまざまなプロキシホストを返す、FindProxyForURLという名前の関数を持つ単なるJavaScriptファイルです。

そのpacファイルで一般的なWebトラフィック用のホストを見つけ、それをC:\Users\<username>\.npmrc内の.npmrcに接続します。

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

あなたの会社のマシンにあなたのドメインとユーザー名でログインしても、 ユーザーのActive Directoryドメイン名はプロキシに必要ではない可能性が高いです 、ユーザー名とパスワードだけがあなたのActiveと異なるかもしれません。ディレクトリログイン)

特別なパスワード文字をエスケープすることを忘れないでください。

54
Ovidiu Buligan

.pacファイルをダウンロードしてください。任意のエディタでそれを開き、PROXY = "PROXY X.X.X.X:80;を探します。あなたはたくさんのプロキシを持っているかもしれません、それらのどれでもコピーして、そして以下の端末コマンドを実行してください:

npm config set proxy http://X.X.X.X:80
npm config set https-proxy http://X.X.X.X:80

これでどんなパッケージでもインストールできるはずです。

43
Sumeet_Pol

私はこの問題をこのように解決しました:

1)このコマンドを実行します。

npm config set strict-ssl false

2)次に、httpsではなくhttpで実行するようにnpmを設定します。

npm config set registry "http://registry.npmjs.org/"

3)それからあなたのパッケージをインストールしてください

npm install <package name>

35
KARTHIKEYAN.A

@Steve Robertsの回答を拡大してください。

私のユーザー名は "domain\username"の形式です - プロキシ設定にスラッシュを含めるとスラッシュが表示されました。だからこれを入力:

npm config set proxy "http://domain\username:password@servername:port/"

domain\user文字列をURLエンコードする必要もありましたが、ユーザー名の内側にスペースがあるので、スペースURLエンコードをエンコードするために+を配置しましたが、%2B(プラス記号のURLエンコード)としてダブルエンコードされます。ただし、スペースのURLエンコードは%20)なので、代わりに次の手順を実行する必要がありました。

npmコマンド

//option one 
//it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:[email protected]:port"
npm config set proxy "http://DOMAIN%5Cuser+name:[email protected]:port"

//option two
//it works best for me
//please notice that I actually used a space 
//instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://DOMAIN%5Cuser name:[email protected]:port"
npm config set proxy "http://DOMAIN%5Cuser name:[email protected]:port"

npm configのトラブルシューティング

npm config listを使用して、上記で設定した解析済みの値を取得しました。これが、ダブルエンコーディングについて発見した方法です。変です。

よろしく。

WINDOWS環境変数(CMDプロンプト)

更新

上記の設定でも、 リクエスト - 簡易HTTPクライアント を内部的にダウンロードするためのいくつかのパッケージ/スクリプトで、まだいくつか問題がありました。そのため、上記のreadmeで説明したように、コマンドラインでプロキシを設定するために 環境変数 を指定できます。Requestはそれらの値を優先します。

その後、環境変数を設定しようとした後、(これを認めることを躊躇しています)数回の試行の後、私はついに次のガイドラインに成功しました。

rem notice that the value after the = has no quotations
rem    - I believe that if quotations are placed after it, they become
rem    part of the value, you do not want that
rem notice that there is no space before or after the = sign
rem     - if you leave a space before it, you will be declaring a variable 
rem     name that includes such space, you do not want to do that
rem     - if you leave a space after it, you will be including the space
rem     as part of the value, you do not want that either
rem looks like there is no need to URL encode stuff in there
SET HTTP_PROXY=http://DOMAIN\user name:[email protected]:port
SET HTTPS_PROXY=http://DOMAIN\user name:[email protected]:port

cntlm

プロキシの設定が必要なすべてのツールでパスワードを更新することによるオーバーヘッドに気付くまで、私は数週間上記の手法を使用しました。

Npmのほかに、私も使用します:

  • ower
  • 浮浪者
    • 仮想ボックス(Linuxを実行している)
    • apt-get [linux]
  • git
  • vscode
  • かっこ
  • 原子
  • tsd

cntlmのセットアップ手順

そこで、 cntlm をインストールしました。 cntlmを設定するのはかなり前向きです、あなたはiniファイルを探します@ C:\Program Files\Cntlm\cntlm.ini

  1. C:\Program Files\Cntlm\cntlm.iniを開きます(管理者権限が必要な場合があります)
  2. UsernameDomainの行を探します(8-9行目と思います)
    • ユーザー名を追加
    • ドメインを追加
  3. Cmdプロンプトで実行:

    cd C:\Program Files\Cntlm\
    cntlm -M
    cntlm -H  
    
    • パスワードを聞かれます:
     cygwin warning:
       MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini
       Preferred POSIX equivalent is: /Cntlm/cntlm.ini
       CYGWIN environment variable option "nodosfilewarning" turns off this warning.
       Consult the user's guide for more details about POSIX paths:
         http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
     Password:
    
  4. cntlm -Hから得られる出力は次のようになります。

    PassLM          561DF6AF15D5A5ADG  
    PassNT          A1D651A5F15DFA5AD  
    PassNTLMv2      A1D65F1A65D1ASD51  # Only for user 'user name', domain 'DOMAIN'
    
    • PassNTLMv2を使用することをお勧めしますので、行PassLMPassNTの前に#を追加するか、または使用しないでください。
  5. Iniファイルのcntlm -Hからの出力をPassLMPassNT、およびPassNTMLv2の行に置き換えて貼り付けるか、元の行をコメントアウトして自分の行を追加します。
  6. Proxyサーバーを追加してください。あなたがプロキシサーバが何であるかわからないなら...私がしたことをしなさい、私はHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settingsの中のAutoConfigURLレジストリキーを探すことによって私のプロキシ自動設定ファイルを探しました。そのURLに移動して、JavaScriptであることが起こるコードを調べます。
  7. Listen ####行を変更することでcntlmが待機するポートを変更できます。ここで、####はポート番号です。

CntlmによるNPMのセットアップ

それで、あなたはあなたのcntmlプロキシをnpmに向け、あなたはipを使うことができます、私はlocalhostとcntlmのためのデフォルトポート3128を使ったので私のプロキシURLはこのように見えます

http://localhost:3128

適切なコマンドで:

npm config setプロキシ http:// localhost:3128

もっと簡単です。あなたはその同じURLを使ってあなたのすべてのツールをセットアップし、あなたは一箇所でパスワードを更新するだけです。人生はそれほど単純ではありません。

Npm CA証明書を設定する必要があります

Npmのドキュメントから ca

あなたの会社のプロキシがそれ自身の自己署名証明書でhttps接続を傍受しているなら、これは避けるために絶対必要です npm config set strict-ssl false (大、無).

基本ステップ

  1. ブラウザから証明書を取得します(Chromesはうまく機能します)。 Base-64 encoded X.509(.CER)としてエクスポートする
  2. 新しい行を\nに置き換えます
  3. .npmrcを編集してca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"という行を追加してください

問題

私は時々npm種類のハングアップに気づいたので、私は(時々強制的に) cntlm を止めてそれを再起動します。

24
Aaron C

私はこれに関していくつかの問題に遭遇しました、そして最後に私がしたことは以下の通りです:

  1. 「自動認証」が選択された中古のFiddler
  2. フィドラーカスタムルールでは、私は追加しました

    if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";}
    
  3. 最後にnpmで私は http:// localhost:8888にプロキシを設定しました

これはうまくいきました。

6
Shoel Palli

NPMが認証エラーを出している場合は、Fiddlerを確認できます。インストールと設定は簡単です。 FiddlerルールをAutomatically Authenticatedに設定します。In.npmrcでこれらのプロパティを設定します

registry=http://registry.npmjs.org
proxy=http://127.0.0.1:8888
https-proxy=http://127.0.0.1:8888
http-proxy=http://127.0.0.1:8888
strict-ssl=false

それは私のために働きました:)

4
Rakesh Sharma

社内ファイアウォールの背後で苦労している人や、SSLに関する問題(ローカル発行者証明書を取得できない)については、以下の手順を試すことができます。

SSLを忘れる

あなたがSSLについて心配していないなら、あなたはあなたのプロキシを設定し、安全でないバージョンにレジストリを変更することによって多くの以前の貢献者のアドバイスに従うことができます:

npm config set proxy http://username:password@proxyname:port
npm config set https-proxy http://username:password@proxyname:port
npm config set registry http://registry.npmjs.org/

ここでの簡単な説明、セキュリティで保護された要求と保護されていない要求で私のプロキシ資格情報は同じです(https-proxy設定では、プロトコルをhttp://のままにします。 )これはあなたにとっても同じかもしれませんし、そうでないかもしれません。

SSLを保ちたい

SSLを維持したいが、strict-ssl=falseを使用したくない場合は、さらに作業が必要です。私にとっては、私は企業のファイアウォールの内側にいて、自己署名証明書を使用しているので、エラーunable to get local issuer certificateを受け取ります。あなたが私と同じボートにいるのなら、npm設定ファイルでcafile=オプションを設定する必要があります。まず、自己署名証明書に関する情報を保持しているPEMファイルを作成する必要があります。その方法がわからない場合は、サードパーティ製ソフトウェアを使用せずにWindows環境を使用する方法があります。

自己署名証明書を使用しているため、どの証明書を信頼するかを明示的に示す必要があります。私の例では、Chromeを使用してwww.google.comにアクセスしたので、証明書を取得できます。

Chromeで、[検査] - > [セキュリティ] - > [証明書の表示]の順に選択します。 SSL接続を許可するすべての証明書が表示されます。これらの証明書が自己署名されていることに注意してください。ぼやけている部分は私の会社です、そして私たちは認証局ではありません。完全な証明書パスをP7Bファイルとしてエクスポートすることも、証明書を個別にCERファイルとしてエクスポートすることもできます(base64エンコード)。フルパスをP7Bとしてエクスポートしてもあまり効果がありません。証明書マネージャでこのファイルを開き、個別のCERファイルとしてエクスポートする必要があるためです。 Windowsでは、P7BファイルをダブルクリックするとCertificate Managerアプリケーションが開きます。

enter image description here

CER(Base 64)としてエクスポートするのは、実際には次の形式のテキストファイルです。

-----BEGIN CERTIFICATE-----
MIIGqzCCBZOgAwIBAgITIwAAABWhFPjwukYhTAADAAAAFTANBgkqhkiG9w0BAQUF
ADBFMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGaXJ2aW5n
b0pvCkNmjWzaNNUg2hYET+pP5nP75aRu+kPRl9UnlQ....rest of certificate...
-----END CERTIFICATE-----

PEMファイルを作成するには、これらの証明書を1つのファイルに積み重ね、拡張子を.pemに変更するだけです。私はこれをするためにメモ帳を使いました。

証明書パスとは逆の順序で証明書をスタックします。そのため、上では* .google.comから始め、その下にWebsenseを貼り付けてから、Issuing CA 1などとします。このようにして、証明書が上から下に解析され、適切なルートCAが検索されます。ルートCAを含めるだけではうまくいきませんが、すべての証明書を含める必要はありません。上記のパスから、Websense証明書(Issuing CA 1、Policy CA、Root CA)の前にある証明書だけを含める必要があります。

これらの自己署名証明書をPEMファイルに保存したら、これらの証明書を信頼できるCAとして使用するようにnpmに指示する準備が整いました。設定ファイルを設定するだけで、うまくいくはずです。

npm config set cafile "C:\yourcerts.pem"

これで、プロキシを(httpとhttps)に設定し、レジストリをhttps://registry.npmjs.orgに設定すると、strict-ssl設定を無効にすることなく、自己署名証明書を使って企業のファイアウォールの内側にパッケージをインストールできるはずです。

4
John Galt

これを試して、次のようにnpmにプロキシを設定してください。

npm config set proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set https-proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"
3
Mohammed Safeer

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はポートです。プロキシ設定に従って変更してください。

2
Pankaj

プロキシを使用して企業ネットワークの内側にいる場合は、ntlmプロキシツールを使用し、ntlmが提供するポートとプロキシを使用しました。たとえば、次の設定を使用しました。

strict-ssl=false
proxy=http://localhost:3125

これが役に立つことを願っています。

サーバーの管理者またはサポートからプロキシのホストとポートを取得します。

設定後

npm config set http_proxy http://username:[email protected]:itsport
npm config set proxy http://username:[email protected]:itsport

パスワードに特殊文字がある場合は、%urlencodeを試してください。例: - ポンド(ハッシュ)は、%23に置き換えてください。

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

2
Shamseer

あなたは "npm config set http-proxy "を使わなければなりません。

つかいます:

npm config set http-proxy http://1.2.3.4:8181
npm config set https-proxy http://1.2.3.4:8181
2

これを試してください、それは私のために働いた唯一のものでした:

npm - プロキシhttp://:@プロキシホスト:--https-proxy http://:@プロキシホスト:--strict-ssl falseインストール-gパッケージ

--strict-ssl falseオプションに注意を払う

がんばろう。

1

プロジェクトフォルダに.npmrcファイルという名前のファイルを作成するだけで、システムレベルでのプロキシ設定を回避できます

#Without password
proxy=http://ipaddress:80
https-proxy=http://ipaddress:80

#With password
proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

プロキシを使用しない場合は、このようにコメントしてください

#proxy=http://ipaddress:80
#https-proxy=http://ipaddress:80

#With password
#proxy=http://<username>:<pass>@proxyhost:<port>
#https-proxy=http://<uname>:<pass>@proxyhost:<port>
1

職場ではZScalerをプロキシとして使用します。私がnpmを動かすことができた唯一の方法は Cntlm を使うことでした。

この答えを見てください。

NTLMプロキシの背後にあるNPM

1
bruceceng

受け入れられた答えで言及されたNPMプロキシセットアップは問題を解決します、しかしあなたがthis npm issueで見ることができるように、いくつかの依存関係はGITを使いますgitプロキシの設定が必要、そして次のようにすることができます。

git config --global http.proxy http://username:password@Host:port
git config --global https.proxy http://username:password@Host:port

NPMプロキシの設定は、次のとおりです。

npm config set proxy "http://username:password@Host:port"
npm config set https-proxy "http://username:password@Host:port"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"
1
Josiel Faleiros

職場でのプロキシ設定の設定と自宅でのそれらの設定をオフにすることにまだ問題があるので、 npm-corpo-proxy.sh とスクリプトを書いて公開しました。どの企業でも、パスワードは頻繁に変更する必要があり、npm configを入力する前にエンコードする必要があります(backash形式のdomain\userも同じ)。

0
Maciek Leks

CNTLMと連携させることができませんでした。上記に掲載されているすべての情報に従ってみましたが、プロキシはまだ接続を承認しませんでした。 Fiddlerでは、インストールして「Automatically Authenticated」オプションをチェックするだけで済みます。しかし動作させるために、私は自分のユーザフォルダから.npmrcファイルを削除し、そして ここに示されたように環境変数を設定しなければなりません 、これらの値で:

set npm_config_https-proxy="http://127.0.0.1:8888"

set npm_config_registry="http://registry.npmjs.org/"
0

私は同様の問題に遭遇し、私のnpm設定ファイル(.npmrc)が間違ったレジストリエントリを持っていることを知りました。コメントアウトして、npm installを再実行しました。出来た。

0

.typingsrcファイルに以下の行を追加すると私は役に立ちました。

{
    "rejectUnauthorized": false,
    "registryURL" :"http://api.typings.org/"
 }
0

私は同じような問題を抱えていました、そして私は上記のすべての回避策を試しましたが、どれも私のために働きませんでした(私は私のパスワードに特殊文字を使っていました。

それとは別に、私は自分のパスワードをプレーンテキストとして追加することに少し不安を感じました。これらすべての課題を克服する最も簡単な解決策は、ある種のリバースプロキシ(Fiddlerなど)を使用することでした。

私はすでに this SOで設定手順を詳しく述べました。

0
Karthik

グーグルでの小さな検索から私が最初に試したのはこれでした

npm config set registry http://registry.npmjs.org/
npm config set proxy "your proxy"
npm config set https-proxy "your proxy"

しかし、それでもnpmは、 "npm install"を実行しようとすると接続が切断されたようです。それから私はコマンドプロンプトでこの行を走らせましたそして今私はnpm installを使うことができます

set NODE_TLS_REJECT_UNAUTHORIZED=0
0
Barkin Kaplan

OS: Windows 7

私のために働いたステップ:

  1. npm config get proxy
  2. npm config get https-proxy

  3. コメント:私は自分のプロキシ設定を知るためにこのコマンドを実行しました
    npm config rm proxy

  4. npm config rm https-proxy
  5. npm config set registry=http://registry.npmjs.org/
  6. npm install
0
Suchi Dvg