【问题标题】:How to exclude certain domains from an npm proxy如何从 npm 代理中排除某些域
【发布时间】:2014-09-23 07:48:21
【问题描述】:

我们在公司防火墙后面使用 npm,因此在 npm 配置中使用代理和 https-proxy 设置。只要所有 npm 模块都是从外部注册表加载的,这就可以正常工作。但事实上,我们在内部 github 上也有内部模块。对这些模块的访问当然不能使用代理。我的问题是:我可以在 npm 配置中指定不应该使用代理的域列表吗?类似于 unix shell 中的 no_proxy 环境变量?

【问题讨论】:

标签: proxy npm


【解决方案1】:

假设您的环境如下所示:

NPM 必须使用本地 Nexus Registry。配置文件:.npmrc

registry = https://your.local.nexus.registry/nexus/content/groups/npm/

你可以通过设置环境变量告诉 npm 使用代理

http_proxy=http://your.proxy.host:3128
https_proxy=http://your.proxy.host:3128

但随后 npm 也会尝试使用代理访问您的(本地)Nexus Registry。

您需要拥有最新的 npm 版本之一(npm 2.14.7 可以正常工作)并设置一个额外的环境变量以从代理中排除您的 Nexus 注册表:

no_proxy=your.local.nexus.registry

【讨论】:

  • 有没有办法用旧版本的 npm 指定“no_proxy”配置?
  • @DánielKis 我还发现在 npm 3.10.10 中 no_proxy 不起作用。我尝试将其放入 npmrc 文件以及主系统环境变量中。你最后是怎么解决的?
  • @MickeyPuri 我也有兴趣!
  • 我正在使用 npm 5.6.0,它似乎在 windows 操作系统设置环境变量“no_proxy”不工作。
  • 我相信npm,应该是noproxy,没有下划线。
【解决方案2】:

自 2018 年 8 月 22 日发布的 NPM 6.4.1 起,即使配置了自定义注册表,您也可以使用 noproxy 选项。

示例:

  • npm config set registry "http://<my-npm-registry-host>:<registry-port>"
  • npm config set proxy "http://<my-proxy-host>:<proxy-port>"
  • npm config set https-proxy "http://<my-proxy-host>:<proxy-port>"
  • npm config set noproxy "my-proxy-host"(接受 *.domain 之类的模式)

检查配置:

  • npm config list

参考资料:

【讨论】:

  • 即使我在 NPM 6.13 上,我也无法让 noproxy 选项工作,所以我查看了代码并改用了 no_proxy 环境变量.有关更多信息,请参阅github.com/npm/cli/blob/latest/node_modules/request/lib/…
  • 我让它在 .npmrc 上使用 noproxy,但它不接受像 *.domain 这样的模式。 Npm 版本 6.13.4。我有环境的 no_proxy 和我的私人仓库的主机名,但它无论如何都没有工作
  • 好吧,也许正如there所说,我们可以只使用一个逗号分隔的字符串或一个域扩展数组
【解决方案3】:

要排除某些域,您可以在 .npmrc 中添加以下行

noproxy[]=.local.nexus
noproxy[]=.internal.npm.repo 

https://docs.npmjs.com/misc/config#noproxy

【讨论】:

    【解决方案4】:

    正如adiesner 所指出的,您不能在npm config 中设置noproxy/no_proxy,因此唯一的方法是通过环境变量:

    npm config set registry "your.local.nexus.registry/nexus/content/groups/npm/"
    
    export http_proxy="http://your.proxy.host:3128"
    export https_proxy=$http_proxy
    export no_proxy="your.local.nexus.registry"
    

    【讨论】:

    • 不确定npm config 命令,但您当然可以在.npmrc 文件中设置noproxy=(是的,截至此日期,命令中没有下划线;输入npm config ls -l在命令行中,它还显示所有非手动设置值的默认值 - 没有no_proxy,但有一个noproxy 选项)
    • noproxy 选项的文档:docs.npmjs.com/misc/config#noproxy
    【解决方案5】:

    如果你使用cntlm,你应该在配置文件“/etc/cntlm.conf”中配置NoProxy选项。例如,

    Username         your_user
    Domain           UCI.CU
    Password         your_password
    Proxy            10.0.0.1:8080
    Listen           3128
    NoProxy          uci.cu, edu.cu, nexus.prod.uci.cu, localhost, 127.0.0.*, 10.*, 192.168.*
    

    记住一定要重启cntlm:sudo systemctl restart cntlm

    【讨论】:

      【解决方案6】:

      对于 PowerShell,命令是:

      $Env:http_proxy = "http://your.proxy.host:3128"
      $Env:https_proxy = "http://your.proxy.host:3128"
      $Env:no_proxy = "..."
      

      【讨论】:

        猜你喜欢
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        • 2011-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多