我们公司使用 Artifactory 存储库来存储内部发布的包并作为 NPM 注册表的代理。有时 resolved
lockfiles/shrinkwrap 文件中的字段与预期的一样,包含我们内部存储库的 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
param,因为我在 npm 代码库中的代码搜索中没有看到它。为什么会发生这种情况?我们可以禁用这种行为吗?将此参数剥离为
postshrinkwrap
是否安全?脚本解决方法?
最佳答案
我认为您问题的根源可能是缓存。
NPM 缓存已下载的包,因此不必再次下载它们,甚至可以在必要时离线重新安装。它还缓存解析的值以供以后使用。如果已经解析并下载了相同版本的包,则无需再次获取并获取更新的下载/解析URL。
您可以使用以下命令手动清除此缓存。
npm cache clean --force
或者,可能是不同版本的 NPM 计算已解析字段的方式不同(是否遵循 Location header )。但是我认为缓存更有可能受到指责。
关于NPM 锁文件/shrinkwrap 获取附加到 "dl"URL 的随机 "resolved"参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53127140/