# 包版本
## 指明版本
你需要一些方法來指明自己開發的包的版本,當你在 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)設置,而不是每個依賴逐一設置。