Composer命令全解析

生產(chǎn)環(huán)境操作

必須把composer.json,和composer.lock納入版本庫(kù),vendor文件夾大可不必放進(jìn)版本庫(kù)
每次開(kāi)發(fā)迭代將更新后的 composer.lock 文件從開(kāi)發(fā)環(huán)境或版本控制系統(tǒng)中拷貝到生產(chǎn)環(huán)境的項(xiàng)目根目錄下,確保覆蓋原有的 composer.lock 文件。
根目錄運(yùn)行 composer install --no-dev 命令。使用 --no-dev 參數(shù)排除開(kāi)發(fā)環(huán)境依賴的安裝覆劈,只安裝生產(chǎn)環(huán)境所需的包范删。這將根據(jù)更新后的 composer.lock 文件中的依賴關(guān)系下載并安裝最新的生產(chǎn)環(huán)境依賴奶躯。
執(zhí)行完成后捣鲸,Composer 將會(huì)更新項(xiàng)目的依賴并安裝到 vendor 目錄中等龙。

常用命令

  • 鏡像
# 配置中國(guó)鏡像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
# 配置其他廠商鏡像
# 阿里云 (好像說(shuō)停用了)
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
# 騰訊
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/
# 華為
composer config -g repo.packagist composer https://repo.huaweicloud.com/repository/php/
# 解除鏡像
composer config -g --unset repos.packagist
  • 項(xiàng)目
# 搜索項(xiàng)目
composer search ThinkPHP
# 創(chuàng)建項(xiàng)目
composer create-project topthink/ThinkPHP=5.1.* ./tp5
# 安裝擴(kuò)展
composer require laravel/laravel ">=5.5"
# 移除擴(kuò)展
composer remove laravel/laravel
  • 生產(chǎn)最佳實(shí)踐
# 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 獲得更快的載入速度,禁用開(kāi)發(fā)者模式
composer dump-autoload -o --no-dev 

自動(dòng)加載 autoload

目前支持四種自動(dòng)加載方式:

  • PSR-0
    PSR-0規(guī)范是PHP5.2之前的一種命名空間映射規(guī)范,它規(guī)定命名空間與文件路徑的對(duì)應(yīng)關(guān)系如下

    1. 命名空間中的每個(gè)下劃線字符(_)都會(huì)被轉(zhuǎn)換成目錄分隔符(/)芦昔;
    2. 命名空間中的每個(gè)命名空間分隔符(\)都會(huì)被轉(zhuǎn)換成目錄分隔符(/)诱贿;
    3. 命名空間中的首字母和下劃線字符都會(huì)被轉(zhuǎn)換成目錄名和文件名中的小寫字母;
    4. 每個(gè)類的文件名必須與類名完全一致烟零,包括大小寫瘪松。
    "psr-0" : {
        "Foo\\" : "psr0src/",
        # 
        "Foo_Bar_" : "psr0src/"
    },
    

    composer install/update之后,PSR-0引用全部合并到vendor/composer/autoload_namespaces.php

  • PSR-4
    PSR-4規(guī)范是較新的一種命名空間映射規(guī)范,它與PSR-0規(guī)范的區(qū)別在于:

    1. 命名空間中的下劃線字符不再被特殊處理锨阿,只有命名空間分隔符(\)會(huì)被轉(zhuǎn)換成目錄分隔符(/);
    2. 命名空間中的首字母和下劃線字符不再被強(qiáng)制轉(zhuǎn)換成小寫字母记罚;
    3. 類的文件名與類名可以不完全一致墅诡,但必須滿足相對(duì)文件路徑和類名的對(duì)應(yīng)關(guān)系
"psr-4": {
    #查找Afishpapa\Httptool\Http類時(shí)的路徑為src/Http.php
    "Afishpapa\\Httptool\\": "src/" 
    #可以在src/和lib/ 下面找 Monolog命名空間下的類
    "psr-4": { "Monolog\\": ["src/", "lib/"] }
    #所有命名空間都來(lái)src/目錄下找
    "" : "src/"
}

composer install/update之后,PSR-4引用全部合并到vendor/composer/automoad_psr4.php中。

return array(
    'Afishpapa\\Httptool\\' => array($baseDir . '/src'),
);
  • Classmap
    composer install/update之后,PSR-4引用全部合并到vendor/composer/autoload_classmap.php中桐智。
    你可以用 classmap 生成支持支持自定義加載的不遵循 PSR-0/4 規(guī)范的類庫(kù)末早。
  • Files
    通常作為函數(shù)庫(kù)的載入方式(而非類庫(kù))。
{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

全局配置

-v : 增加消息的詳細(xì)程度,正常輸出
-vv : 增加消息的詳細(xì)程度,更加詳細(xì)得輸出
-vvv : 增加消息的詳細(xì)程度,debug用
-h : 顯示幫助
-q : 不要顯示任何信息
-n : 不要問(wèn)任何交互問(wèn)題
-d : 設(shè)置工作目錄
--ansi: 強(qiáng)制輸出 ANSI 編碼
--no-ansi: 禁用 ANSI 編碼
--version (-V): 展示所有應(yīng)用版本
--profile: 展示時(shí)間和內(nèi)存信息

常用配置

--prefer-install: 默認(rèn)值為dist
    dist: 檢查本地緩存壓縮包,如果有直接復(fù)制到vendor目錄,如果本地緩存沒(méi)有,則去遠(yuǎn)程倉(cāng)庫(kù)下載壓縮包,如果遠(yuǎn)程倉(cāng)庫(kù)沒(méi)有提供壓縮包,則嘗試從github中安裝包,并且刪除.git版本信息,總之,dist能夠快速地下載并安裝依賴包说庭,適用于大部分生產(chǎn)環(huán)境然磷。
    source: 直接從github中下載源碼,保留.git信息,如果您需要對(duì)包進(jìn)行自定義修改或者需要對(duì)其進(jìn)行特殊的構(gòu)建過(guò)程,則應(yīng)該使用 source刊驴。
    auto:2.1版本后已棄用
    
-o: 生成自動(dòng)加載器文件的優(yōu)化版本姿搜,以加快類加載速度。

-a: 默認(rèn)情況下捆憎,Composer 會(huì)根據(jù) composer.json 中的 PSR-4 和 PSR-0 配置來(lái)生成自動(dòng)加載器, 使用 --classmap-authoritative 選項(xiàng)可以讓 Composer 忽略 PSR-4 和 PSR-0 配置舅柜,而直接根據(jù)類文件生成一個(gè)類映射表(class map),并將其作為自動(dòng)加載器的唯一來(lái)源躲惰。需要注意的是致份,使用 --classmap-authoritative 選項(xiàng)可能會(huì)導(dǎo)致一些問(wèn)題,比如在添加新的類文件時(shí)需要重新生成類映射表础拨,否則新添加的類無(wú)法被自動(dòng)加載器加載氮块。因此,建議在開(kāi)發(fā)環(huán)境中使用這個(gè)選項(xiàng)來(lái)提高性能诡宗,但在生產(chǎn)環(huán)境中不要使用滔蝉,以免出現(xiàn)問(wèn)題。

--dry-run: 執(zhí)行安裝過(guò)程的模擬運(yùn)行僚焦,不會(huì)實(shí)際下載或安裝任何軟件包锰提。

--dev: 安裝開(kāi)發(fā)依賴項(xiàng),包括測(cè)試框架和調(diào)試工具等。

composer init

以交互方式初始化composer

--name: 包名,格式為作者/名稱,比如monolog/monolog
--description: 簡(jiǎn)短描述
--author: 作者名
--type: 包的安裝類型,默認(rèn)library
    library : 它會(huì)簡(jiǎn)單的將文件復(fù)制到 vendor 目錄
    project : 當(dāng)前包是一個(gè)項(xiàng)目立肘,而不是一個(gè)庫(kù)
    metapackage : 一個(gè)空的包边坤,包含依賴并且需要觸發(fā)依賴的安裝,這將不會(huì)對(duì)系統(tǒng)寫入額外的文件谅年。
    composer-plugin : 它有一個(gè)自定義安裝類型茧痒,可以為其它包提供一個(gè) installler。
--homepage: 官網(wǎng)首頁(yè)
--require: 引入包,格式為 包:版本 foo/bar:1.0.0
--require-dev: 開(kāi)發(fā)用的組件
-s : 最小穩(wěn)定性值 dev stable 
--license (-l): 許可證
--repository: 指定一個(gè)或多個(gè) Composer 倉(cāng)庫(kù)
-a : 添加一個(gè)autoload.psr-4的對(duì)象到composer.json

composer install

如果存在 composer.lock 文件融蹂,它會(huì)從此文件讀取依賴版本,這確保了該庫(kù)的每個(gè)使用者都能得到相同的依賴版本旺订。
如果不存在 composer.lock 文件,它會(huì)從composer.json 文件讀取依賴版本超燃,并把其安裝到 vendor 目錄下区拳。

如果沒(méi)有 composer.lock 文件,composer 將在處理完依賴關(guān)系后創(chuàng)建它意乓。

composer require

添加一個(gè)包到composer.json文件,如果沒(méi)有composer.json 就創(chuàng)建一個(gè)

# 該命令會(huì)安裝兩個(gè)不同的軟件包
# vendor/package:2.* : 版本號(hào)以 2. 開(kāi)頭樱调,后面跟著任何版本號(hào)。
# vendor/package2:dev-master : 使用 dev-master 分支届良。這意味著它將安裝該分支的最新版本笆凌,通常是開(kāi)發(fā)版本,不屬于正式發(fā)布士葫。
composer require "vendor/package:2.*" vendor/package2:dev-master

composer update

獲取依賴的最新版本

# 只更新這兩個(gè)包vendor/package vendor/package2
composer update vendor/package vendor/package2

# 更新符合正則匹配的包
composer update "vendor/*"

# 更新依賴包到指定版本,需符合composer.json的約束
composer update --with vendor/package:2.0.1

composer remove

移除依賴包

# 移除這兩個(gè)包
composer remove vendor/package vendor/package2

composer reinstall

重裝包,如果不小心改了包文件,可以使用重裝命令恢復(fù)

# 重裝兩個(gè)包
composer reinstall acme/foo acme/bar

# 重裝正則匹配的包
composer.phar reinstall "acme/*"

composer check-platform-reqs

用于檢查您的 PHP 和擴(kuò)展版本是否符合已安裝包的平臺(tái)要求

--lock: 僅從鎖定文件中檢查要求乞而,而不是從已安裝的包中檢查要求。
--no-dev: 不檢查 require-dev 包要求慢显。
-f: 格式
> composer check-platform-reqs
Checking platform requirements for packages in the vendor dir
ext-json      1.7.0   success
ext-libxml    7.3.4   success
ext-mbstring  7.3.4   success
ext-openssl   7.3.4   success
ext-simplexml 7.3.4   success
php           7.3.4   success

composer global

global允許您全局運(yùn)行其他命令爪模,如install、remove鳍怨、require,update

composer search monolog

搜索依賴包

-N : 只搜包名
-O : 只搜作者
-t : 搜全稱
λ composer search monolog
monolog/monolog                       Sends your logs to files, sockets, inboxes, databases and various web services
symfony/monolog-bundle                Symfony MonologBundle
symfony/monolog-bridge                Provides integration for Monolog with various Symfony components
...

composer show / composer info

列出所有可用的包信息

λ composer show
defuse/php-encryption                v2.3.1    Secure PHP Encryption Library
laminas/laminas-diactoros            2.5.0     PSR HTTP Message implementations
laminas/laminas-zendframework-bridge 1.4.1     Alias legacy ZF class names to Laminas Project equivalents.
...

列出單個(gè)包的詳情

λ composer show slim/slim
name     : slim/slim
descrip. : Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs
keywords : api, framework, micro, router
versions : * 3.12.4
type     : library
license  : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : https://slimframework.com
source   : [git] https://github.com/slimphp/Slim.git ce3cb65a06325fc9fe3d0223f2ae23113a767304
dist     : [zip] https://api.github.com/repos/slimphp/Slim/zipball/ce3cb65a06325fc9fe3d0223f2ae23113a767304 ce3cb65a06325fc9fe3d0223f2ae23113a767304
path     : D:\workspace\oauth\examples\vendor\slim\slim
names    : slim/slim, psr/http-message-implementation

support
issues : https://github.com/slimphp/Slim/issues
source : https://github.com/slimphp/Slim/tree/3.12.4

autoload
psr-4
Slim\ => Slim

requires
ext-json *
ext-libxml *
ext-simplexml *
nikic/fast-route ^1.0
php >=5.5.0
pimple/pimple ^3.0
psr/container ^1.0
psr/http-message ^1.0

requires (dev)
phpunit/phpunit ^4.0
squizlabs/php_codesniffer ^3.6.0

provides
psr/http-message-implementation 1.0

composer outdated

列出所有安裝包是否可以更新

λ composer outdated
Direct dependencies required in composer.json:
laminas/laminas-diactoros 2.5.0  2.14.0 PSR HTTP Message implementations
league/event              2.2.0  3.0.1  Event package
slim/slim                 3.12.4 4.9.0  Slim is a PHP micro framework that helps you quickly write simple yet po...

Transitive dependencies not required in composer.json:
psr/container             1.1.1  2.0.1  Common Container Interface (PHP FIG PSR-11)

composer browse / composer home

瀏覽器直接打開(kāi)這個(gè)包的github倉(cāng)庫(kù)

# 打開(kāi)這個(gè)包的官網(wǎng)
composer browser -H slim/slim
# 打印slim的github倉(cāng)庫(kù)鏈接
composer browser -s slim/slim

composer suggests

給你人生路上一點(diǎn)建議

λ composer suggests
lcobucci/jwt suggests:
 - lcobucci/clock: *

1 additional suggestions by transitive dependencies can be shown with --all

composer fund

給出你所用的包的捐贈(zèng)鏈接

composer depends / why

composer depends 命令用于顯示一個(gè)包的依賴關(guān)系樹呻右。如果你要?jiǎng)h除一個(gè)包之前,可以用這個(gè)命令先看看它上面是不是有人

> composer depends psr/log -t

psr/log 1.1.4 Common interface for logging libraries
├──composer/composer 2.4.x-dev (requires psr/log ^1.0 || ^2.0 || ^3.0)
├──composer/composer dev-main (requires psr/log ^1.0 || ^2.0 || ^3.0)
├──composer/xdebug-handler 3.0.3 (requires psr/log ^1 || ^2 || ^3)
│  ├──composer/composer 2.4.x-dev (requires composer/xdebug-handler ^2.0.2 || ^3.0.3)
│  └──composer/composer dev-main (requires composer/xdebug-handler ^2.0.2 || ^3.0.3)
└──symfony/console v5.4.11 (conflicts psr/log >=3) (circular dependency aborted here)

composer prohibits / why-not

告訴您哪些包在阻止你想安裝的包,并給出理由

composer validate

如果你手動(dòng)修改composer.json,當(dāng)準(zhǔn)備提交composer.json文件之前,最好執(zhí)行這條命令檢查一下

composer status

如果你手動(dòng)修改過(guò)一個(gè)包,這個(gè)包安裝來(lái)源是source,則可以用這個(gè)命令看你本地修改記錄,相當(dāng)于git status

composer self-update / selfupdate

composer程序自更新

# 更新到指定版本
composer self-update 2.4.0-RC1

composer config

修改當(dāng)前項(xiàng)目或者全局的配置

-g : 修改全局配置文件
--unset: 移除配置
-l: 展示全部配置信息,如果加上-g,就顯示全局的
--absolute: *-dir的配置返回絕對(duì)路徑
--append: 追加一個(gè)鏡像時(shí),設(shè)置比較低的優(yōu)先級(jí)
--source: 展示config從哪里加載的
# 添加一個(gè)測(cè)試foo到repositories
composer config repo.foo vcs https://github.com/foo/bar
# 添加一個(gè)阿里云鏡像到repositories(阿里云鏡像涼了)
composer config repo.packagist composer https://mirrors.aliyun.com/composer/

#效果如下
"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://mirrors.aliyun.com/composer/"
    },
    "foo": {
        "type": "vcs",
        "url": "https://github.com/foo/bar"
    }
}

# 修改extra配置
composer config extra.foo.bar value
composer config --json extra.foo.bar '{"baz": true, "qux": []}'

composer create-project

創(chuàng)建項(xiàng)目/包,相當(dāng)于git clone + composer install

composer create-project doctrine/orm path "2.2.*"

composer dump-autoload

當(dāng)修改了包里面的類名,或者增加刪除文件之后,需要執(zhí)行這個(gè)命令

# -o 選項(xiàng)是為了生產(chǎn)環(huán)境中的性能優(yōu)化,
composer dump-autoload -o
# -a 選項(xiàng)則是為了開(kāi)發(fā)環(huán)境中的重新生成類映射鞋喇。
composer dump-autoload -a

composer clear-cache / clearcache / cc

清理本地包緩存

archive

從遠(yuǎn)程下載一個(gè)包,并打包成zip/tar壓縮包

php composer.phar archive vendor/package 2.0.21 --format=zip

run-script / run

你可以運(yùn)行此命令來(lái)手動(dòng)執(zhí)行声滥,只需要指定腳本的名稱,可選的 --no-dev 參數(shù)允許你禁用開(kāi)發(fā)者模式侦香。

{
    "scripts": {
        "post-update-cmd": "MyVendor\\MyClass::postUpdate",
        "post-package-install": [
            "MyVendor\\MyClass::postPackageInstall"
        ],
        "post-install-cmd": [
            "MyVendor\\MyClass::warmCache",
            "phpunit -c app/"
        ]
    }
}
# 將會(huì)運(yùn)行所有 post-install-cmd 事件下定義的腳本落塑。
`composer run-script post-install-cmd` 

diagnose

可以用來(lái)檢查當(dāng)前 Composer 環(huán)境是否符合最佳實(shí)踐,包括 PHP 環(huán)境罐韩、Composer 配置等憾赁。

audit

檢查當(dāng)前項(xiàng)目的依賴項(xiàng)是否存在已知的安全漏洞。

help

使用 help 可以獲取指定命令的幫助信息散吵。

php composer.phar help install
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末龙考,一起剝皮案震驚了整個(gè)濱河市蟆肆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晦款,老刑警劉巖炎功,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缓溅,居然都是意外死亡蛇损,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門坛怪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淤齐,“玉大人,你說(shuō)我怎么就攤上這事袜匿「模” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵居灯,是天一觀的道長(zhǎng)锈死。 經(jīng)常有香客問(wèn)我,道長(zhǎng)穆壕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任其屏,我火速辦了婚禮喇勋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偎行。我一直安慰自己川背,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布蛤袒。 她就那樣靜靜地躺著熄云,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妙真。 梳的紋絲不亂的頭發(fā)上缴允,一...
    開(kāi)封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音珍德,去河邊找鬼练般。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锈候,可吹牛的內(nèi)容都是我干的薄料。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泵琳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼摄职!你這毒婦竟也來(lái)了誊役?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谷市,失蹤者是張志新(化名)和其女友劉穎蛔垢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歌懒,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啦桌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了及皂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甫男。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖验烧,靈堂內(nèi)的尸體忽然破棺而出板驳,到底是詐尸還是另有隱情,我是刑警寧澤碍拆,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布若治,位于F島的核電站,受9級(jí)特大地震影響感混,放射性物質(zhì)發(fā)生泄漏端幼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一弧满、第九天 我趴在偏房一處隱蔽的房頂上張望婆跑。 院中可真熱鬧,春花似錦庭呜、人聲如沸滑进。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扶关。三九已至,卻和暖如春数冬,著一層夾襖步出監(jiān)牢的瞬間节槐,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工吉执, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疯淫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓戳玫,卻偏偏與公主長(zhǎng)得像熙掺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咕宿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容