每当我生成一个程序包锁定文件时,也会出现一个如下所示的“ 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并没有太大帮助。
答案 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