一个通用代理未必适合所有软件包源。现代 Yarn 支持按主机名配置网络设置,让选定的主机可以使用与默认不同的路由。

例如,项目可以保留一条通用路由,并为内部仓库选择另一条路由:

httpsProxy: "http://203.0.113.10:8080"
networkSettings:
  "registry.example.internal":
    httpsProxy: "http://203.0.113.20:8080"

这两个地址都是占位符。对于通往公共软件包源的通用路由,在允许使用公共代理的情况下,HTTP 代理列表可以提供候选。内部仓库的覆盖设置应继续使用其已批准的代理。请把配置写入适用于现代 Yarn 版本的 .yarnrc.yml 中。这个例子选择了两个代理;它并没有说内部主机应当直连。

匹配请求的主机名

networkSettings 条目作用于主机名模式,而不是软件包作用域或任意 URL 路径。如果你想要的是单主机规则,就把它写得精确。只有当你确实希望额外的主机共享该配置时,通配符才有用。

软件包作用域和网络主机名是不同的选择器。带作用域的软件包可以从一个与其他软件包共享主机的仓库获取,而被重定向的构件可能来自完全不同的主机名。

跟踪完整的下载路径

如果元数据使用一个主机,而归档下载使用另一个主机,它们可能匹配到不同的网络设置。在扩大规则范围之前,先记录真正失败的 URL。“仓库能用”并不能说明后续请求选择了哪条路由。

Yarn 的按主机设置还可以包含 CA 和其他 TLS 配置。请把这些决定分开:选择代理地址本身并不提供审查环境所需的信任。

让覆盖设置可见

使用该 Yarn 版本支持的工具检查项目的实际生效配置,然后测试预期的请求。如果完整配置转储包含凭据,就避免分享它。

当各主机确实需要不同路由时,这个功能很有用。如果每个请求都应使用同一个端点,那么单一通用设置比不断增长的一串相同主机名覆盖更易于维护。

相关文章