5

npm (nodejs) のプライベート レジストリを設定しようとしていますが、パブリック データベース全体を複製したくありません。これを行う方法についての投稿を見たことがありますが、このアプローチに従っても別の問題があります。私のワークステーションは VPN の背後にあるため、パブリック レジストリからモジュールを取得できるように NPM でプロキシを設定する必要があります。プライベート レジストリを作成すると、会社の VPN 内に配置されます (一般にアクセスできるようにすることはできません)。つまり、プライベート レジストリにアクセスするためにプロキシは必要ありませんが、前に述べたように、パブリック レジストリにはプロキシが必要です。私は git から NPM のコードを取得しましたが、それを変更する前に、この問題を回避する方法を知っている人はいますか? npm install を実行するときにレジストリとプロキシを指定できることは知っていますが、npm install だけを実行できるようにしたいと考えています。とにかくpacファイルをnpmに適用する方法はありますか? ソースコードの修正以外に何かできることはありますか?

4

1 に答える 1

1

私はこの正確な問題に直面しました。プライベート npm レジストリの前に nginx プロキシをセットアップします。404 でグローバル npm レジストリへのフォールバックを作成しました。

そのため、npm のインストールを行うときは、nginx プロキシを指定するだけで済みました。これにより、パッケージが見つかった場合はプライベート レジストリから、見つからなかった場合はグローバル レジストリからパッケージが提供されます。

これは、使用できる nginx 構成です。

server {
    listen 80 default_server;

    location ~ ^/registry/*/ { 
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host  $http_host;
        proxy_set_header  X-NginX-Proxy true;

        proxy_pass  http://private_npm_upstream;
        proxy_intercept_errors  on;
        error_page 404 = @fallback-2;

        proxy_redirect off;
    }
    location @fallback-2 {
        access_log /var/log/nginx/global_npm.access.log;

        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host  registry.npmjs.org;
        proxy_set_header  X-NginX-Proxy true;

        proxy_pass http://registry.npmjs.org;
        proxy_redirect off;
        proxy_intercept_errors  on;
    }
}

upstream global_npm_upstream {
    server registry.npmjs.org;
}

upstream private_npm_upstream { 
    server 127.0.0.1:5984; 
}
于 2014-01-22T20:20:59.143 に答える