我目前正在试验 Satis。我希望能够在某个地方获取我的私有包的确切版本,因此通常在composer.lock中的所有内容。我总是通过 Git 提交composer.lock。但如果我理解正确的话,Satis 在其packages.json 中总是只包含必需的部分,即我的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 一起工作。但这个信息对我来说很有趣。
2 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
安装软件包时,Composer 会即时重新计算所有依赖项。这基于composer.json
您的应用程序和composer.json
所有依赖项的文件。
Acomposer.lock
不应该是任何包的一部分,并且安装包时不会考虑它。
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
所以,我现在建立了一个解决方法。整个事情并不十分完美,因为大型存储库的运行时间相对较长,这就是为什么我必须每天将其作为 cron 运行一次。但效果很好。
我创建了一个新的 Satis 控制台命令。
此命令使用 PackageSelection 类来确定所有现有包。
我遍历包列表并查找 dist 文件的路径和名称。
我将 ZIP 文件解压到内存中并查找composer.lock。如果有,我会解析它并读取依赖包的确切版本号。
我将信息汇总在一个单独的 JSON 文件中,并将其与 htdocs 下的packages.json 并行存储。从那里我可以调用它并将其集成到我自己的应用程序中或进一步处理它。
- 2 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消