在package-lock.json中解析URL有什么意义?

时间:2018-12-17 12:10:11

标签: node.js npm package-lock.json

每当我生成一个程序包锁定文件时,也会出现一个如下所示的“ resolved”块:

"resolved": "http://devel.npm.registry:4873/lodash/-/lodash-4.17.5.tgz"

此URL的意义是什么?以后,如果我尝试基于此程序包锁安装依赖项,是否需要使用相同的npm注册表?因为我们将不同的npm注册表用于本地开发和生产构建。因此,在开发时,我使用devel.npm.registry,但CI工具使用production.npm.registry。根据我的测试,URL无关紧要(我尝试过npm@6.4.1)。但是当前的实现方式很快就会改变,还是有意忽略了URL?我觉得npm的某些先前版本实际上检查了解析的URL。

在这种情况下,documentation并没有太大帮助。

1 个答案:

答案 0 :(得分:3)

我在网上找到了有关此问题的一些文章。跟随链接:

  

npm使用JSON作为锁定文件的格式。好消息是,因为npm@5.0.0会忽略package-lock.json文件上的已解析字段,并且在存在的情况下基本上回退到.npmrc中定义的字段或使用CLI通过--registry参数定义的字段,否则,它将使用已解析字段中的定义。

https://medium.com/verdaccio/verdaccio-and-deterministic-lock-files-5339d82d611e


  

前一天,关于#npm5好东西的另一条推文。

     

npm现在无法确定用于生成package-lock.json的注册表。

https://twitter.com/maybekatz/status/862834964932435969


  

package-lock.json中解决的目的是在缺少包时绕过依赖关系解析步骤(获取元数据)。完整性是为了验证您是否得到了相同的东西。如果没有解决字段,未缓存的安装可能会由于元数据的更改而中断,并且安装的速度也将显着降低,因为我们必须下载完整的元数据才能实际下载任何内容。

     

请注意,package-lock.json不允许从不同的注册表中获取不同的软件包。即使您具有使用不同解析字段的不同软件包的软件包锁,也将始终从npmrc中当前的registration =设置中获取所有软件包。与上面配置的注册表不匹配的已解析字段将通过我上面提到的(较慢的)元数据获取进行处理,但仍只会从当前注册表中获取。

https://github.com/npm/npm/issues/16849#issuecomment-312442508