Composer進階使用 —— 經常使用命令和版本約束

這篇文章主要介紹一些經常使用的包管理命令以及包的版本如何進行約束。php

經常使用命令

require命令

在《Composer快速入門》中已經簡單介紹過使用install命令安裝依賴的方式。除了install命令,咱們還可使用require命令快速的安裝一個依賴而不須要手動在composer.json裏添加依賴信息:web

$ composer require monolog/monolog
Using version ^1.19 for monolog/monolog
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing psr/log (1.0.0)
    Downloading: 100%         

  - Installing monolog/monolog (1.19.0)
    Downloading: 100%         

monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
......
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
Writing lock file
Generating autoload files

Composer會先找到合適的版本,而後更新composer.json文件,在require那添加monolog/monolog包的相關信息,再把相關的依賴下載下來進行安裝,最後更新composer.lock文件並生成php的自動加載文件。json

update命令

經過update命令,能夠更新項目裏全部的包,或者指定的某些包。安全

# 更新全部依賴
$ composer update

# 更新指定的包
$ composer update monolog/monolog

# 更新指定的多個包
$ composer update monolog/monolog symfony/dependency-injection

# 還能夠經過通配符匹配包
$ composer update monolog/monolog symfony/*

須要注意的時,包能升級的版本會受到版本約束的約束,包不會升級到超出約束的版本的範圍。例如若是composer.json裏包的版本約束爲^1.10,而最新版本爲2.0。那麼update命令是不能把包升級到2.0版本的,只能最高升級到1.x版本。關於版本約束請看後面的介紹。bash

remove命令

使用remove命令能夠移除一個包及其依賴(在依賴沒有被其餘包使用的狀況下):composer

$ composer remove monolog/monolog
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Removing monolog/monolog (1.19.0)
  - Removing psr/log (1.0.0)
Writing lock file
Generating autoload files

search命令

使用search命令能夠進行包的搜索:socket

$ composer search monolog
monolog/monolog Sends your logs to files, sockets, inboxes, databases and various web services

# 若是隻是想匹配名稱可使用--only-name選項
$ composer search --only-name monolog

show命令

使用show命令能夠列出項目目前所安裝的包的信息:ui

# 列出全部已經安裝的包
$ composer show

# 能夠經過通配符進行篩選
$ composer show monolog/*

# 顯示具體某個包的信息
$ composer show monolog/monolog

版本約束

前面說到,咱們能夠指定要下載的包的版本。例如咱們想要下載版本1.19的monolog。咱們能夠經過composer.json文件:code

{
    "require": {
        "monolog/monolog": "1.19"
    }
}

而後運行install命令,或者經過require命令達到目的:orm

$ composer require monolog/monolog:1.19

# 或者
$ composer require monolog/monolog=1.19

# 或者
$composer require monolog/monolog 1.19

除了像上面那樣指定具體的版本,咱們還能夠經過不一樣的約束方式去指定版本。

基本約束

精確版本

能夠指定具體的版本,告訴Composer只能安裝這個版本。可是若是其餘的依賴須要用到其餘的版本,則包的安裝或者更新最後會失敗並終止。

例子:1.0.2

範圍

使用比較操做符你能夠指定包的範圍。這些操做符包括:>>=<<=!=

你能夠定義多個範圍,使用空格 或者逗號,表示邏輯上的與,使用雙豎線||表示邏輯上的或。其中與的優先級會大於或。

須要注意的是,使用沒有邊界的範圍有可能會致使安裝不可預知的版本,並破壞向下的兼容性。建議使用折音號操做符。

例子:

  • >=1.0

  • >=1.0 <2.0

  • >=1.0 <1.1 || >=1.2

範圍(使用連字符)

帶連字符的範圍代表了包含的版本範圍,意味着確定是有邊界的。其中連字符的左邊代表了>=的版本,而連字符的右邊狀況則稍微有點複雜。若是右邊的版本不是完整的版本號,則會被使用通配符進行補全。例如1.0 - 2.0等同於>=1.0.0 <2.12.0至關於2.0.*),而1.0.0 - 2.1.0則等同於>=1.0.0 <=2.1.0

例子:1.0 - 2.0

通配符

可使用通配符去定義版本。1.0.*至關於>=1.0 <1.1

例子:1.0.*

下一個重要版本操做符

波浪號~

咱們先經過後面這個例子去解釋~操做符的用法:~1.2至關於>=1.2 <2.0.0,而~1.2.3至關於>=1.2.3 <1.3.0。對於使用Semantic Versioning做爲版本號標準的項目來講,這種版本約束方式很實用。例如~1.2定義了最小的小版本號,而後你能夠升級2.0如下的任何版本而不會出問題,由於按照Semantic Versioning的版本定義,小版本的升級不該該有兼容性的問題。簡單來講,~定義了最小的版本,而且容許版本的最後一位版本號進行升級(沒懂得話,請再看一邊前面的例子)。

例子:~1.2

須要注意的是,若是~做用在主版本號上,例如~1,按照上面的說法,Composer能夠安裝版本1之後的主版本,可是事實上是~1會被看成~1.0對待,只能增長小版本,不能增長主版本。

折音號^

^操做符的行爲跟Semantic Versioning有比較大的關聯,它容許升級版本到安全的版本。例如,^1.2.3至關於>=1.2.3 <2.0.0,由於在2.0版本前的版本應該都沒有兼容性的問題。而對於1.0以前的版本,這種約束方式也考慮到了安全問題,例如^0.3會被看成>=0.3.0 <0.4.0對待。

例子:^1.2.3

版本穩定性

若是你沒有顯式的指定版本的穩定性,Composer會根據使用的操做符,默認在內部指定爲-dev或者-stable。例如:

約束 內部約束
1.2.3 =1.2.3.0-stable
>1.2 >1.2.0.0-stable
>=1.2 >=1.2.0.0-dev
>=1.2-stable >=1.2.0.0-stable
<1.3 <1.3.0.0-dev
<=1.3 <=1.3.0.0-stable
1 - 2 >=1.0.0.0-dev <3.0.0.0-dev
~1.3 >=1.3.0.0-dev <2.0.0.0-dev
1.4.* >=1.4.0.0-dev <1.5.0.0-dev

若是你想指定版本只要穩定版本,你能夠在版本後面添加後綴-stable

minimum-stability 配置項定義了包在選擇版本時對穩定性的選擇的默認行爲。默認是stable。它的值以下(按照穩定性排序):devalphabetaRCstable。除了修改這個配置去修改這個默認行爲,咱們還能夠經過穩定性標識(例如@stable@dev)來安裝一個相比於默認配置不一樣穩定性的版本。例如:

{
    "require": {
        "monolog/monolog": "1.0.*@beta",
        "acme/foo": "@dev"
    }
}

參考

相關文章
相關標籤/搜索