package-lock.json中的npm“ resolved”字段随着JFrog人工制品

时间:2019-09-20 15:00:34

标签: npm artifactory package-lock.json

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

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

开发人员之间通过Git共享的package-lock.json文件中的resolved字段在“ npm install”运行之间不断变化,而对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",

有时查询参数指向npmjs.org注册表:

 - "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",

任何这些变化也可能朝相反的方向。

这真的很烦人,因为这意味着我们不断在package-lock.json中进行无意义的更改,这会导致合并冲突,并经常阻止npm ci正确执行。 npm cache clean --force似乎没有帮助。我知道npm install可以自动解决package-lock.json合并冲突,但这对npm ci没有帮助(因为整个问题是在CI环境中运行npm install)。而且,无论如何,看看虚拟npm注册表如何在内部解析软件包(我怀疑发生在这里)有什么好处?

是否存在某种配置选项来防止JFrog Artifactory对虚拟npm注册表中的已解决程序包URL进行此类更改?还是npm中的错误?

环境:

  • npm 6.11.3
  • JFrog Artifactory 6.10.6

3 个答案:

答案 0 :(得分:1)

我不知道为什么出现这些备用URL或如何使其停止。但是,您可以使用npm-merge-driver减轻(甚至消除!)开发人员的合并冲突之苦。它由npm cli团队工作多年的一名开发人员编写,其唯一目的是自动消除package-lock.json合并冲突。

答案 1 :(得分:0)

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

然后,进一步的 npm install 应该按预期解析。

答案 2 :(得分:-1)

这种情况通常是由开发人员安装的 npm 版本略有不同引起的。 npm的版本7刚刚发布,因此现在是确保团队安装完全相同版本的最佳时机。

如果这样不起作用,请尝试将团队切换到yarnpnpm