TL;DR:对于本地软件包,我应该在
@dev
中使用 dev-main
还是 composer.json
吗?
在我们的项目中,我们有一个中心
composer.json
,其中包含所需的所有依赖项,包括本地依赖项 - 代码包含在 git 存储库中,但作为单独的作曲家包隔离出来。
我们有一个本地文件夹设置为存储库:
"repositories": [
{
"type": "path",
"url": "./app/*/*"
}
]
我在某处读到我们应该使用
@dev
语法包含依赖项 - 例如
"require": {
"app/local": "@dev",
但是,这会将 当前分支 存储在
composer.lock
中,因此当合并功能分支时,锁定文件会引用不存在的分支,直到运行下一个 composer update
。这样可以吗?
我喜欢
@dev
的想法,因为它表示哪些包是本地的,但我不喜欢引用不存在的分支。
你正在混合不同的概念,它们确实有一些重叠,但最终意味着不同的东西。
我喜欢 @dev 的想法,因为它表示哪些包是本地的
这是错误的。
@dev
是“稳定标志”
完整的包链接形式为 “[constraint][@stability flag]”。
使用语法
"require": {
"foo/package: "@dev"
}
您只是说:“我不关心此软件包的特定版本,安装任何可用的版本或其他约束规定的版本;但是此软件包的最低稳定性是“dev”,而不是我的任何最低稳定性为项目的其余部分休息”.
如果您使用:
"require": {
"foo/package: "dev-main"
}
...那么您正在指定实际的版本约束。 (此外,由于版本约束以
dev-
开头,composer会自动推断出该包的最低稳定性是@dev
,因此它将将此约束理解为:foo/package:dev-main@dev
。
TLDR:您很可能应该使用实际的版本约束。稳定性标志并不像你想象的那样做。在某些情况下,只需在包中指定一个没有版本限制的稳定性标志,但这通常只是为了覆盖单个所需包的项目的最低稳定性。
require 和 require-dev 还支持稳定性标志 采用“constraint@stability flag”的形式。 它们允许您进一步限制或扩展稳定性 包超出了最低稳定性设置的范围。你可以 将它们应用于约束,或者将它们应用于空约束,如果 例如,您希望允许依赖项的不稳定包。
如果您正在使用生产构建,我会将包锁定到特定分支和哈希。在这种情况下,请考虑使用语义版本控制。
{
"require": {
"my/package": "1.0.0#abc123"
}
}
希望这有帮助!