每当我生成一个package-lock文件时,也有一个“resolved”块,看起来像这样:
"resolved": "http://devel.npm.registry:4873/lodash/-/lodash-4.17.5.tgz"
这个URL的意义是什么?稍后,如果我尝试安装基于此package-lock的依赖项,我需要使用相同的npm注册表吗?因为我们使用不同的npm注册表进行本地开发和生产构建。因此,当我开发时,我使用devel.npm.registry
,但CI工具使用production.npm.registry
。根据我的测试,URL并不重要(我尝试了[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
)。但它是当前的实现,即将改变或故意忽略的URL?我有一种感觉,以前的一些版本的npm实际上检查了解析的URL。
在这种情况下,文档没有多大帮助。
2条答案
按热度按时间ws51t4hk1#
我在网上找到了一些关于这个问题的文章。点击链接:
npm使用JSON作为锁文件的格式。好消息是,由于email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)忽略了package-lock.json文件中的resolved字段,并且基本上回退到.npmrc中定义的字段,或者在存在的情况下使用CLI通过--registry参数,否则,它将使用resolved字段中定义的字段。
https://medium.com/verdaccio/verdaccio-and-deterministic-lock-files-5339d82d611e
又一天,又一条关于#npm5好东西的推文。
npm现在不知道你使用哪个注册表来生成包-lock.json。
https://twitter.com/maybekatz/status/862834964932435969
package-lock.json中resolved的目的是在缺少包时绕过依赖项解析步骤(获取元数据)。诚信就是要确认你得到的是同样的东西。如果没有resolved字段,未缓存的安装可能会由于元数据更改而中断,并且它们也会明显变慢,因为我们必须在实际下载任何内容之前执行完整的元数据获取。
请注意,package-lock.json不允许从不同的注册中心获取不同的包。即使你有一个包锁,不同的包使用不同的resolved字段,所有的包总是从npmrc中的当前registry=设置中获取。与配置的注册表不匹配的解析字段将通过我上面提到的(较慢的)元数据获取,但仍然只从当前注册表获取。
https://github.com/npm/npm/issues/16849#issuecomment-312442508
q3aa05252#
尝试将
npm-shrinkwrap.json
中的package-lock.json
转换为npm shrinkwrap
,这将保留包的依赖关系,但删除会导致跨npm环境问题的“resolved”和“integrity”属性。