31

每当我生成一个包锁定文件时,还有一个看起来像这样的“已解决”块:

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

这个网址有什么意义?稍后,如果我尝试基于这个 package-lock 安装依赖项,是否需要使用相同的 npm 注册表?因为我们使用不同的 npm 注册表进行本地开发和生产构建。因此,当我开发时,我使用devel.npm.registry.,但 CI 工具使用production.npm.registry. 根据我的测试,URL 无关紧要(我试过了npm@6.4.1)。但是是当前的实现很快就会改变,还是故意忽略 URL?我感觉以前的一些 npm 版本实际上检查了解析的 URL。

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

4

1 回答 1

28

我在网上找到了一些关于这个问题的文章。按照链接:

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 不允许从不同的注册表中获取不同的包。即使你有一个使用不同解析字段的不同包的包锁,所有包都将始终从你当前的 registry= 设置中获取,在 npmrc 中。与配置的注册表不匹配的已解析字段将通过我上面提到的(较慢的)元数据获取,但仍将仅从当前注册表中获取。

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

于 2018-12-18T06:06:29.617 回答