生產(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)系如下- 命名空間中的每個(gè)下劃線字符(_)都會(huì)被轉(zhuǎn)換成目錄分隔符(/)芦昔;
- 命名空間中的每個(gè)命名空間分隔符(\)都會(huì)被轉(zhuǎn)換成目錄分隔符(/)诱贿;
- 命名空間中的首字母和下劃線字符都會(huì)被轉(zhuǎn)換成目錄名和文件名中的小寫字母;
- 每個(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ū)別在于:- 命名空間中的下劃線字符不再被特殊處理锨阿,只有命名空間分隔符(\)會(huì)被轉(zhuǎn)換成目錄分隔符(/);
- 命名空間中的首字母和下劃線字符不再被強(qiáng)制轉(zhuǎn)換成小寫字母记罚;
- 類的文件名與類名可以不完全一致墅诡,但必須滿足相對(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