# 包版本
## 指明版本
你需要一些方法来指明自己开发的包的版本,当你在 Packagist 上发布自己的包,它能够从 VCS (git, svn, hg) 的信息推断出包的版本,因此你不必手动指明版本号,并且也不建议这样做。请查看[标签](https://docs.phpcomposer.com/02-libraries.html#Tags)和[分支](https://docs.phpcomposer.com/02-libraries.html#Branches)来了解版本号是如何被提取的。
如果你想要手动创建并且真的要明确指定它,你只需要添加一个`version`字段:
~~~json
{
"version": "1.0.0"
}
~~~
> **注意:**你应该尽量避免手动设置版本号,因为标签的值必须与标签名相匹配。
### 标签
对于每一个看起来像版本号的标签,都会相应的创建一个包的版本。它应该符合 'X.Y.Z' 或者 'vX.Y.Z' 的形式,`-patch`、`-alpha`、`-beta`或`-RC`这些后缀是可选的。在后缀之后也可以再跟上一个数字。
下面是有效的标签名称的几个例子:
* 1.0.0
* v1.0.0
* 1.10.5-RC1
* v4.4.4beta2
* v2.0.0-alpha
* v2.0.4-p1
> **注意:**即使你的标签带有前缀`v`, 由于在需要`require`一个[版本的约束](https://docs.phpcomposer.com/01-basic-usage.html#Package-Versions)时是不允许这种前缀的, 因此`v`将被省略(例如标签`V1.0.0`将创建`1.0.0`版本)。
### 分支
对于每一个分支,都会相应的创建一个包的开发版本。如果分支名看起来像一个版本号,那么将创建一个如同`{分支名}-dev`的包版本号。例如一个分支`2.0`将产生一个`2.0.x-dev`包版本(加入了`.x`是出于技术的原因,以确保它被识别为一个分支,而`2.0.x`的分支名称也是允许的,它同样会被转换为`2.0.x-dev`)。如果分支名看起来不像一个版本号,它将会创建`dev-{分支名}`形式的版本号。例如`master`将产生一个`dev-master`的版本号。
下面是版本分支名称的一些示例:
* 1.x
* 1.0 (equals 1.0.x)
* 1.1.x
> **注意:**当你安装一个新的版本时,将会自动从它`source`中拉取。 详细请查看[`install`](https://docs.phpcomposer.com/03-cli.html#install)命令。
### 别名
它表示一个包版本的别名。例如,你可以为`dev-master`设置别名`1.0.x-dev`,这样就可以通过 require`1.0.x-dev`来得到`dev-master`版本的包。
详细请查看[“别名”](https://docs.phpcomposer.com/articles/aliases.html)。
在前面的例子中,我们引入的 monolog 版本指定为`1.0.*`。这表示任何从`1.0`开始的开发分支,它将会匹配`1.0.0`、`1.0.2`或者`1.0.20`。
版本约束可以用几个不同的方法来指定。
| 名称 | 实例 | 描述 |
| --- | --- | --- |
| 确切的版本号 | `1.0.2` | 你可以指定包的确切版本。 |
| 范围 | `>=1.0``>=1.0,<2.0``>=1.0,<1.1|>=1.2` | 通过使用比较操作符可以指定有效的版本范围。
有效的运算符:`>`、`>=`、`<`、`<=`、`!=`。
你可以定义多个范围,用逗号隔开,这将被视为一个**逻辑AND**处理。一个管道符号`|`将作为**逻辑OR**处理。
AND 的优先级高于 OR。 |
| 通配符 | `1.0.*` | 你可以使用通配符`*`来指定一种模式。`1.0.*`与`>=1.0,<1.1`是等效的。 |
| 赋值运算符 | `~1.2` | 这对于遵循语义化版本号的项目非常有用。`~1.2`相当于`>=1.2,<2.0`。想要了解更多,请阅读下一小节。 |
### 下一个重要版本(波浪号运算符)
`~`最好用例子来解释:`~1.2`相当于`>=1.2,<2.0`,而`~1.2.3`相当于`>=1.2.3,<1.3`。正如你所看到的这对于遵循[语义化版本号](http://semver.org/)的项目最有用。一个常见的用法是标记你所依赖的最低版本,像`~1.2`(允许1.2以上的任何版本,但不包括2.0)。由于理论上直到2.0应该都没有向后兼容性问题,所以效果很好。你还会看到它的另一种用法,使用`~`指定最低版本,但允许版本号的最后一位数字上升。
> **注意:**虽然`2.0-beta.1`严格地说是早于`2.0`,但是,根据版本约束条件, 例如`~1.2`却不会安装这个版本。就像前面所讲的`~1.2`只意味着`.2`部分可以改变,但是`1.`部分是固定的。
### 稳定性
默认情况下只有稳定的发行版才会被考虑在内。如果你也想获得 RC、beta、alpha 或 dev 版本,你可以使用[稳定标志](https://docs.phpcomposer.com/04-schema.html#Package-links)。你可以对所有的包做[最小稳定性](https://docs.phpcomposer.com/04-schema.html#minimum-stability)设置,而不是每个依赖逐一设置。