Composer命令全解析

豎橫山發表於2023-04-10

常用命令

  • 映象

    # 配置中國映象
    composer config -g repo.packagist composer https://packagist.phpcomposer.com
    # 配置其他廠商映象
    # 阿里雲 (好像說停用了)
    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
  • 專案

    # 搜尋專案
    composer search ThinkPHP
    # 建立專案
    composer create-project topthink/ThinkPHP=5.1.* ./tp5
    # 安裝擴充套件
    composer require laravel/laravel ">=5.5"
    # 移除擴充套件
    composer remove laravel/laravel
  • 生產最佳實踐

    # 轉換 PSR-0/4 autoloading 到 classmap 獲得更快的載入速度,禁用開發者模式
    composer dump-autoload -o --no-dev 

自動載入 autoload

目前支援四種自動載入方式:

  • PSR-0
    PSR-0規範是PHP5.2之前的一種名稱空間對映規範,它規定名稱空間與檔案路徑的對應關係如下

    1. 名稱空間中的每個下劃線字元(_)都會被轉換成目錄分隔符(/);
    2. 名稱空間中的每個名稱空間分隔符(\)都會被轉換成目錄分隔符(/);
    3. 名稱空間中的首字母和下劃線字元都會被轉換成目錄名和檔名中的小寫字母;
    4. 每個類的檔名必須與類名完全一致,包括大小寫。
      "psr-0" : {
       "Foo\\" : "psr0src/",
       # 
       "Foo_Bar_" : "psr0src/"
      },
      composer install/update之後,PSR-0引用全部合併到vendor/composer/autoload_namespaces.php
  • PSR-4
    PSR-4規範是較新的一種名稱空間對映規範,它與PSR-0規範的區別在於:

    1. 名稱空間中的下劃線字元不再被特殊處理,只有名稱空間分隔符(\)會被轉換成目錄分隔符(/);
    2. 名稱空間中的首字母和下劃線字元不再被強制轉換成小寫字母;
    3. 類的檔名與類名可以不完全一致,但必須滿足相對檔案路徑和類名的對應關係
      "psr-4": {
      #查詢Afishpapa\Httptool\Http類時的路徑為src/Http.php
      "Afishpapa\\Httptool\\": "src/"    
      #可以在src/和lib/ 下面找 Monolog名稱空間下的類
      "psr-4": { "Monolog\\": ["src/", "lib/"] }
      #所有名稱空間都來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 規範的類庫。

  • Files
    通常作為函式庫的載入方式(而非類庫)。
    {
      "autoload": {
          "files": ["src/MyLibrary/functions.php"]
      }
    }

全域性配置

-v : 增加訊息的詳細程度,正常輸出
-vv : 增加訊息的詳細程度,更加詳細得輸出
-vvv : 增加訊息的詳細程度,debug用
-h : 顯示幫助
-q : 不要顯示任何資訊
-n : 不要問任何互動問題
-d : 設定工作目錄
--ansi: 強制輸出 ANSI 編碼
--no-ansi: 禁用 ANSI 編碼
--version (-V): 展示所有應用版本
--profile: 展示時間和記憶體資訊

常用配置

--prefer-install: 預設值為dist
    dist: 檢查本地快取壓縮包,如果有直接複製到vendor目錄,如果本地快取沒有,則去遠端倉庫下載壓縮包,如果遠端倉庫沒有提供壓縮包,則嘗試從github中安裝包,並且刪除.git版本資訊,總之,dist能夠快速地下載並安裝依賴包,適用於大部分生產環境。
    source: 直接從github中下載原始碼,保留.git資訊,如果您需要對包進行自定義修改或者需要對其進行特殊的構建過程,則應該使用 source。
    auto:2.1版本後已棄用

-o: 生成自動載入器檔案的最佳化版本,以加快類載入速度。

-a: 預設情況下,Composer 會根據 composer.json 中的 PSR-4PSR-0 配置來生成自動載入器, 使用 --classmap-authoritative 選項可以讓 Composer 忽略 PSR-4PSR-0 配置,而直接根據類檔案生成一個類對映表(class map),並將其作為自動載入器的唯一來源。需要注意的是,使用 --classmap-authoritative 選項可能會導致一些問題,比如在新增新的類檔案時需要重新生成類對映表,否則新新增的類無法被自動載入器載入。因此,建議在開發環境中使用這個選項來提高效能,但在生產環境中不要使用,以免出現問題。

--dry-run: 執行安裝過程的模擬執行,不會實際下載或安裝任何軟體包。

--dev: 安裝開發依賴項,包括測試框架和除錯工具等。

composer init

以互動方式初始化composer

--name: 包名,格式為作者/名稱,比如monolog/monolog
--description: 簡短描述
--author: 作者名
--type: 包的安裝型別,預設library
    library : 它會簡單的將檔案複製到 vendor 目錄
    project : 當前包是一個專案,而不是一個庫
    metapackage : 一個空的包,包含依賴並且需要觸發依賴的安裝,這將不會對系統寫入額外的檔案。
    composer-plugin : 它有一個自定義安裝型別,可以為其它包提供一個 installler。
--homepage: 官網首頁
--require: 引入包,格式為 包:版本 foo/bar:1.0.0
--require-dev: 開發用的元件
-s : 最小穩定性值 dev stable 
--license (-l): 許可證
--repository: 指定一個或多個 Composer 倉庫
-a : 新增一個autoload.psr-4的物件到composer.json

composer install

如果存在 composer.lock 檔案,它會從此檔案讀取依賴版本,這確保了該庫的每個使用者都能得到相同的依賴版本。
如果不存在 composer.lock 檔案,它會從composer.json 檔案讀取依賴版本,並把其安裝到 vendor 目錄下。

如果沒有 composer.lock 檔案,composer 將在處理完依賴關係後建立它。

composer require

新增一個包到composer.json檔案,如果沒有composer.json 就建立一個

# 該命令會安裝兩個不同的軟體包
# vendor/package:2.* : 版本號以 2. 開頭,後面跟著任何版本號。
# vendor/package2:dev-master : 使用 dev-master 分支。這意味著它將安裝該分支的最新版本,通常是開發版本,不屬於正式釋出。
composer require "vendor/package:2.*" vendor/package2:dev-master

composer update

獲取依賴的最新版本

# 只更新這兩個包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

移除依賴包

# 移除這兩個包
composer remove vendor/package vendor/package2

composer reinstall

重灌包,如果不小心改了包檔案,可以使用重灌命令恢復

# 重灌兩個包
composer reinstall acme/foo acme/bar

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

composer check-platform-reqs

用於檢查您的 PHP 和擴充套件版本是否符合已安裝包的平臺要求

--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允許您全域性執行其他命令,如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.
...

列出單個包的詳情

λ 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

瀏覽器直接開啟這個包的github倉庫

# 開啟這個包的官網
composer browser -H slim/slim
# 列印slim的github倉庫連結
composer browser -s slim/slim

composer suggests

給你人生路上一點建議

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

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

composer fund

給出你所用的包的捐贈連結

composer depends / why

composer depends 命令用於顯示一個包的依賴關係樹。如果你要刪除一個包之前,可以用這個命令先看看它上面是不是有人

> 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

如果你手動修改composer.json,當準備提交composer.json檔案之前,最好執行這條命令檢查一下

composer status

如果你手動修改過一個包,這個包安裝來源是source,則可以用這個命令看你本地修改記錄,相當於git status

composer self-update / selfupdate

composer程式自更新

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

composer config

修改當前專案或者全域性的配置

-g : 修改全域性配置檔案
--unset: 移除配置
-l: 展示全部配置資訊,如果加上-g,就顯示全域性的
--absolute: *-dir的配置返回絕對路徑
--append: 追加一個映象時,設定比較低的優先順序
--source: 展示config從哪裡載入的
# 新增一個測試foo到repositories
composer config repo.foo vcs https://github.com/foo/bar
# 新增一個阿里雲映象到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

建立專案/包,相當於git clone + composer install

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

composer dump-autoload

當修改了包裡面的類名,或者增加刪除檔案之後,需要執行這個命令

# -o 選項是為了生產環境中的效能最佳化,
composer dump-autoload -o
# -a 選項則是為了開發環境中的重新生成類對映。
composer dump-autoload -a

composer clear-cache / clearcache / cc

清理本地包快取

archive

從遠端下載一個包,並打包成zip/tar壓縮包

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

run-script / run

你可以執行此命令來手動執行,只需要指定指令碼的名稱,可選的 --no-dev 引數允許你禁用開發者模式。

{
    "scripts": {
        "post-update-cmd": "MyVendor\\MyClass::postUpdate",
        "post-package-install": [
            "MyVendor\\MyClass::postPackageInstall"
        ],
        "post-install-cmd": [
            "MyVendor\\MyClass::warmCache",
            "phpunit -c app/"
        ]
    }
}
# 將會執行所有 post-install-cmd 事件下定義的指令碼。
`composer run-script post-install-cmd` 

diagnose

可以用來檢查當前 Composer 環境是否符合最佳實踐,包括 PHP 環境、Composer 配置等。

audit

檢查當前專案的依賴項是否存在已知的安全漏洞。

help

使用 help 可以獲取指定命令的幫助資訊。

php composer.phar help install
本作品採用《CC 協議》,轉載必須註明作者和本文連結
遇強則強,太強另說

相關文章