最近在编译一个node相关的工程,配置好编译环境,设置好代理,昨天一切都进展的挺顺利,很快就得到了结果。但后来发现编译的版本稍微有点儿差异,校验不通过。就把源码切到特定的tag上重来一次。然后就发现了一个神奇的bug。

使用yarn编译,中间一步依赖的一个包在编译时需要去api.github.com上下载特定版本的软件包。但是目标版本使用的软件包版本号类似于v1.2.3-2,在小版本号之后还有-2进行区分,然后这个软件包总是下载失败,导致编译失败。

验证了好久之后确认,代理设置没有问题,其它依赖包可以下载成功,但这个就是不行。后来在issue列表中确认,在特定proxy环境下,这个包会下载失败。失败原因是node中下载使用的request包在经过部分proxy时,对-这样的字符无法正确处理,url错误导致下载失败。

而且搜索后发现这个问题很普遍,不只是vscode的issue列表中报过多,其他很多使用node的开源软件都报过。而且因为是request的问题,一般的解决方法就是回退或更新第3方依赖的软件包,确保软件包的url中不包含-这样的版本号。