我们公司使用Artifactory存储库来存储内部发布的包,并作为NPM注册表的代理。有时,lockfiles/hrinkwrap文件中的resolved
字段与预期的一样,包含我们内部存储库的URL,但偶尔它们会显示为类似的内容(为清晰起见,添加了换行符(:
https://our.repository.com/artifactory/api/npm/some-repo/lodash/-/lodash-3.10.1.tgz
?dl=https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz
然后,从拉请求到拉请求,这些dl
参数不断地振荡到存在或移除,这取决于哪个开发人员执行npm install
,导致大量的拉请求&提交噪音。
我猜是Artifactory添加了这个dl
参数,因为我在npm代码库中的代码搜索中没有看到它。
为什么会发生这种情况?我们可以禁用此行为吗?将此参数作为postshrinkwrap
脚本的变通方法是否安全?
我认为问题的根源可能是缓存。
NPM缓存已下载的软件包,因此无需再次下载,必要时甚至可以离线重新安装。它还缓存解析后的值以供以后使用。如果已经解析并下载了相同版本的包,则无需再次获取并获取更新的下载/解析URL。
您可以使用以下命令手动清除此缓存。
npm cache clean --force
或者,可能是不同版本的NPM计算解析字段的方式不同(是否在Location标头之后(。然而,我认为缓存更可能是罪魁祸首。