【发布时间】:2020-11-19 04:45:04
【问题描述】:
我目前正在试用 Satis。我希望能够在某个地方获得我的私有包的确切版本,所以通常在 composer.lock 中的所有内容。我总是通过 Git 提交 composer.lock。
但如果我理解正确的话,它的 packages.json 中的 Satis 总是只包含需要的部分,即我的 composer.json 中的部分,因此当然只有版本范围。
有没有办法配置 Satis 以便也存储 composer.locks 或者我如何获得我的包的确切“快照”?
+++ 示例 +++
好的,我试着解释一下。
假设我有一个包 my/package。这里我添加了几个文件,包括 composer.json,我在其中定义了 symfony/console 应该安装在大于或等于 4 的版本中。现在我执行“composer install”,并且 Symfony 安装在 4.4 版本中。我提交所有文件,包括 composer.lock 并创建一个版本 1.0。
现在我要去萨蒂斯。在这里,我将 my/package 和 my/package 的相应存储库 URL 添加到 satis.json 并更新它。 Satis 正确地检查了我的包,并在 packages.json 或更准确地说是 all*.json 我的包在 1.0 版中列出。到目前为止一切都很好。
但是,如果我现在看一下 Satis 在 all*.json 中为我的包存储的元数据,我会发现这里实际上是我指定的要求,即 symfony/console 应该安装在大于或等于 4 的版本中. 所以 Satis 拍摄了 composer.json 的快照,显然忽略了 composer.lock。所以我没有机会看到我的版本 1.0 与 Symfony 的确切版本 4.4 一起使用,而例如版本 1.1 与 symfony/console 4.5 一起使用。但这些信息对我来说很有趣。
【问题讨论】:
-
你想在哪里存储任何东西? Composer 仅读取来自 Satis 的包,不存储任何内容
-
即我打电话给example.com/packages.json 并解析它。
-
听起来不错 - 解析该包文件有什么问题?
-
问题是没有版本号。 Satis 似乎只保存了需求,而不是实际安装的版本,我很想知道它们。
-
如果您的包的 1.1 版适用于 symfony/console 4.5 而不适用于 symfony/console 4.4,您应该更新包的
composer.json中的约束。这就是约束点——它为依赖项提供了版本范围。范围越广,您最终出现依赖冲突的可能性就越小。使用来自composer.lock的精确版本基本上可以保证冲突,因为每个包都可能有一些细微的差异。
标签: php composer-php