当前位置: 首页 > 知识库问答 >
问题:

NPM"解决"-package-lock.json中的字段随着JFrog工艺品不断变化

萧允晨
2023-03-14

我们有一个私有的JFrog工件(下面匿名的名称),npm是在项目根目录中配置的。npmrc-文件:

registry=https://artifactory.jfrog.private.com:443/api/npm/npm-registry-virtual/

开发者之间通过Git共享的package-lock.json文件中的解析字段在运行“npm安装”之间不断变化,而不会对package.json.进行任何更改

有时会将dl查询参数(指向完全相同的URL)添加到解析的URL中:

- "resolved": "https://artifactory.jfrog.private.com:443/api/npm/npm-registry-virtual/@sailshq/lodash/-/lodash-3.10.3.tgz",
+ "resolved": "https://artifactory.jfrog.private.com:443/api/npm/npm-registry-virtual/@sailshq/lodash/-/lodash-3.10.3.tgz?dl=https://artifactory.jfrog.private.com/@sailshq/lodash/-/lodash-3.10.3.tgz",

有时,查询参数指向NPMJ。组织注册处:

 - "resolved": "https://artifactory.jfrog.private.com:443/api/npm/npm-registry-virtual/aproba/-/aproba-1.2.0.tgz",
 - "resolved": "https://artifactory.jfrog.private.com:443/api/npm/npm-registry-virtual/aproba/-/aproba-1.2.0.tgz?dl=https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",

有时字段直接指向npmjs.org存储库:

- "resolved": "https://artifactory.jfrog.private.com:443/api/npm/npm-registry-virtual/acorn/-/acorn-3.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",

这些变化中的任何一个也可能走向相反的方向。

这真是令人恼火,因为这意味着我们在包锁中不断地进行无意义的更改。json,这会导致合并冲突,并经常阻止npm ci正确执行。npm缓存清理——强制似乎没有帮助。我知道npm安装可以解决包锁问题。json合并会自动发生冲突,但这对npm ci没有帮助(因为关键是不要在ci环境中运行npm安装)。而且,不管怎样,看到虚拟npm注册表如何在内部解析包有什么好处(我怀疑这里正在发生这种情况)?

是否有某种配置选项可以防止JFrog Artifactory对虚拟npm注册表中解析的包URL进行此类更改?或者它可能是npm中的一个bug?

环境:

  • npm 6.11。3
  • JFrog人工制品厂6.10。六,

共有3个答案

齐奕
2023-03-14

这种事情通常是由开发人员安装了稍微不同版本的npm引起的。npm的版本7刚刚发布,所以现在是确保团队都安装了完全相同的版本的最佳时机。

如果这不起作用,尝试将团队切换到纱线或pnpm。

单于奕
2023-03-14

我们的团队成功地首先运行了npm ci,以确保我们本地下拉和缓存的依赖项与package-lock.json文件匹配。

然后,进一步的npm安装s应按预期解决。

常波鸿
2023-03-14

我不知道为什么会出现这些备选URL,也不知道如何让它们停止。但是你可以减少(甚至消除!)通过使用npm合并驱动程序,为开发人员带来了合并冲突的痛苦。它是由一位受雇于NPMCLI团队多年的开发人员编写的,其唯一目的是自动化包锁。json合并冲突。

 类似资料:
  • 问题内容: 通常,在建立团队的过程中,我遇到了合并冲突,而我的快速解决方案一直是删除文件并使用重新生成文件。我没有认真考虑此修复程序的含义,因为它以前没有引起任何可察觉的问题。 删除文件并以这种方式重新创建而不是手动解决冲突是否存在问题? 问题答案: 是的,它可能并且将以非常糟糕的方式影响所有项目。 如果您的团队在每次使用后都没有运行,则你们都使用不同的依赖项版本。因此,其结尾为“但对我有用!!”

  • 我错过了什么?如何让npm真正尊重我的锁文件?

  • 问题内容: 我最近才升级到 npm @ 5 。我现在有一个 package-lock.json 文件,其中包含 package.json中的 所有内容。我希望当我运行该程序时,将从锁定文件中提取依赖项版本,以确定应该在我的 node_modules 目录中安装什么。奇怪的是,它实际上最终修改并重写了 package-lock.json 文件。 例如,锁定文件的打字稿指定为版本 2.1.6 。然后,

  • 有没有办法检查一个文件是否与兼容,而不运行?兼容意味着指定的版本可以通过来实现。 当前方法 我目前正在通过运行并检查是否更改为: 用例 我想在持续集成中添加一个测试,以确保如果开发人员修改了,他们也会相应地更新。这一点很重要的原因是我们的持续集成使用了,而不是仅引用,因此如果开发人员不更新锁文件,持续集成设置将与他们期望的不匹配。

  • 我正在使用google cloud build来构建我的maven项目,并使用JFrog antifactory registry来存储maven工件。云中构建需要这些工件。我尝试了几部纪录片[1],[2]。但有时会出现很多错误。我可以带上最新的指南来集成云构建和JFrog antifactory吗。正确的身份验证方法需要使用用户名密码以外的其他方法。可以使用API密钥方法。 [1].https:

  • 我试图建立一个使用firebase数据库和存储的社交媒体应用程序。下面是预期的流量。 > 用户上传存储在当前用户文件夹中的firebase存储中的个人资料图片和存储在firebase数据库中的URL以便快速访问。(很好) 用户发表他们的想法。这样可以在数据库中保存用户信息,如邮件、用户名和配置文件图像URL。(很好)。 现在的问题是,如果一个用户更新了他或她的个人资料图片,这将覆盖firebase