我在TFS 2017服务器上托管了一个npm注册表,其中包含Package Management扩展。它的主机名有一个单独的部分,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
主机扩展名添加不当如果我在浏览器中调用固定网址,http://dnsXxx:8080/tfs/.../npm/registry/@abc%2fmypackage
,我会得到预期的JSON答案。
有没有人看到解决方案?
问题是由于企业代理,甚至在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)。