我可以设置npm使用.pac文件吗?

El *_*eno 5 node.js npm

我正在尝试为npm(nodejs)设置一个私有注册表,但我不想复制整个公共数据库.我看过关于如何做到这一点的帖子,但是,即使我遵循这种方法,我还有另一个问题.我的工作站位于VPN后面,所以我需要在NPM中设置代理才能从公共注册表中获取模块.如果我创建我的私人注册表,它将位于公司VPN内(使其无法公开访问).这意味着我不需要代理来访问我的私人注册表,但就像我之前说的那样,我确实需要它用于公共注册表.我从git获得了NPM的代码,但在修改它之前,我想我会问,有没有人知道如何解决这个问题?我知道你可以在运行npm install时指定注册表和代理,但我希望能够运行npm install.无论如何将pac文件应用于npm?除了修改源代码之外,我还能做些什么吗?

小智 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; 
}
Run Code Online (Sandbox Code Playgroud)