node.js - 我可以将 npm 设置为使用 .pac 文件吗?

标签 node.js npm

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

最佳答案

我确实遇到了这个问题。 我们在私有(private) npm 注册表前设置了一个 nginx 代理。我们在 404 上创建了一个回退到全局 npm 注册表。

因此,在执行 npm 安装时,我们只需指定 nginx 代理,如果找到,它将负责从私有(private)注册表提供包,如果没有,则从全局注册表提供包。

这是您可以使用的 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; 
}

关于node.js - 我可以将 npm 设置为使用 .pac 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15662878/

相关文章:

javascript - Socket.emit() 和/或 socket.on() 不起作用

node.js - Sass Loader 错误 : Invalid options object. Stylus Loader 已使用与 API 架构不匹配的选项对象进行初始化

node.js - Nunjucks: 'if' 与多个 'and' 或 'or' 条件

unit-testing - 如何从CDN注入(inject)外部JS到Jest单元测试?

reactjs - 浏览器列表 : caniuse-lite is outdated. 请运行下一个命令 `yarn upgrade`

node.js - 避免 "destroying non-socket.io upgrade"错误

node.js - 在网络浏览器中嵌入网络摄像机

node.js - 为什么 npm 给出 500 和 503 错误 : "registry error parsing json"?

javascript - 将数据从 main 传递到渲染器 (electron-js)

javascript - 在 Node 中运行 PHP 并将数据解析回 index.html