0

我在 TFS 2017 服务器上托管一个 npm 注册表,带有包管理扩展。它的主机名只有一个部分 ,dnsXxx没有任何扩展名.com, 并在端口上配置8080。我正在使用一个.npmrc文件为范围内的包定义此存储库@abc

@abc:registry=http://dnsXxx:8080/tfs/.../npm/registry/
@abc:proxy=null
@abc:always-auth=true

npm i @abc/mypackage当我尝试从包含该文件的文件夹中使用类似命令安装它的一个包时.npmrc,该命令需要很长时间才能最终以npm ERR! 503 Service Unavailable: @abc/mypackage@....

使用 WireShark,我发现 npm 调用的 url 已被修改,我猜是这样“标准化”的:GET http://www.dnsXxx.com/tfs/.../npm/registry/@abc%2fmypackage HTTP/1.1,导致:

  • 缺少端口
  • www.主机前缀和.com主机扩展名添加不当

如果我在浏览器中调用固定 url http://dnsXxx:8080/tfs/.../npm/registry/@abc%2fmypackage,我会得到预期的 JSON 答案。

有人看到解决方案吗?

4

1 回答 1

1

问题是由于企业代理,甚至proxy=null.npmrc文件中调用。这是重新格式化主机名的代理。当我切换到服务器IP地址,更新身份验证令牌时,它终于成功了:

@abc:registry=http://10.x.y.z:8080/tfs/.../npm/registry/
@abc:always-auth=true

; Treat this auth token like a password. Do not share it with anyone, including Microsoft support. This token expires on or before 05-Feb-18.
; begin auth token
//10.x.y.z:8080/tfs/.../npm/registry/:_authToken=...    
//10.x.y.z:8080/tfs/.../npm/:_authToken=...  
; end auth token

其他选项:使用FQN作为服务器名称(xxx.yyy.zzz 而不仅仅是 xxx),它不会被代理更改(进入 www.xxx.com)。

于 2017-11-07T15:06:27.070 回答