您应该在本地包的 Composer JSON 中使用 @dev 或 `dev-main` 吗?

问题描述 投票:0回答:2

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
的想法,因为它表示哪些包是本地的,但我不喜欢引用不存在的分支。

php composer-php
2个回答
0
投票

你正在混合不同的概念,它们确实有一些重叠,但最终意味着不同的东西。

我喜欢 @dev 的想法,因为它表示哪些包是本地的

这是错误的。

@dev
是“稳定标志

完整的包链接形式为 “[constraint][@stability flag]”

使用语法

"require": {
    "foo/package: "@dev"
}

您只是说:“我不关心此软件包的特定版本,安装任何可用的版本或其他约束规定的版本;但是此软件包的最低稳定性是“dev”,而不是我的任何最低稳定性为项目的其余部分休息”.

如果您使用:

"require": {
    "foo/package: "dev-main"
}

...那么您正在指定实际的版本约束。 (此外,由于版本约束以

dev-
开头,composer会自动推断出该包的最低稳定性是
@dev
,因此它将将此约束理解为:
foo/package:dev-main@dev


TLDR:您很可能应该使用实际的版本约束。稳定性标志并不像你想象的那样做。在某些情况下,只需在包中指定一个没有版本限制的稳定性标志,但这通常只是为了覆盖单个所需包的项目的最低稳定性。


-1
投票

根据composer.json schema

require 和 require-dev 还支持稳定性标志 采用“constraint@stability flag”的形式。 它们允许您进一步限制或扩展稳定性 包超出了最低稳定性设置的范围。你可以 将它们应用于约束,或者将它们应用于空约束,如果 例如,您希望允许依赖项的不稳定包。

如果您正在使用生产构建,我会将包锁定到特定分支和哈希。在这种情况下,请考虑使用语义版本控制

{
    "require": {
        "my/package": "1.0.0#abc123"
    }
}

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.