Composer コマンドの完全な分析

Composer の中国語ドキュメント

Composer コマンドの完全な分析

共通コマンド

鏡像

中国ミラーの構成

composer config -g repo.packagist composer https://packagist.phpcomposer.com

他のベンダーのミラーを構成する

Alibaba Cloud (無効になっているようです)
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 の自動読み込みをクラスマップに変換して読み込みを高速化し、開発者モードを無効にする

composer dump-autoload -o --no-dev 

自動ロード 自動ロード

現在、次の 4 つの自動読み込み方法がサポートされています。

PSR-0

PSR-0仕様はPHP5.2以前の名前空間マッピング仕様であり、名前空間とファイルパスの対応を次のように規定しています。

  1. ネームスペース内の各アンダースコア文字 (_) はディレクトリ区切り文字 (/) に変換されます。
  2. ネームスペース内の各ネームスペース区切り文字 (\) はディレクトリ区切り文字 (/) に変換されます。
  3. ネームスペースの頭文字とアンダースコア文字は、ディレクトリ名とファイル名では小文字に変換されます。
  4. 各クラスのファイル名は、大文字の区別も含めてクラス名と正確に一致する必要があります。
"psr-0" : {
    
    
 "Foo\\" : "psr0src/",
 # 
 "Foo_Bar_" : "psr0src/"
},

Composer のインストール/更新後、すべての PSR-0 参照が Vendor/composer/autoload_namespaces.php にマージされます。

PSR-4

PSR-4 仕様は新しい名前空間マッピング仕様であり、次の点で PSR-0 仕様とは異なります。

ネームスペース内のアンダースコア文字は特別に扱われなくなり、ネームスペース区切り文字 (\) のみがディレクトリ区切り文字 (/) に変換されます。ネームスペース内の最初の文字とアンダースコア文字は強制的に小文字に変換されなくなりました
。 ;
クラス ファイルのファイル名とクラス名は完全に同じではない可能性がありますが、相対ファイル パスとクラス名の対応関係を満たす必要があります。

"psr-4": {
    
    
#查找Afishpapa\Httptool\Http类时的路径为src/Http.php
"Afishpapa\\Httptool\\": "src/"    
#可以在src/和lib/ 下面找 Monolog命名空间下的类
"psr-4": {
    
     "Monolog\\": ["src/", "lib/"] }
#所有命名空间都来src/目录下找
"" : "src/"
}

Composer のインストール/更新後、すべての PSR-4 参照は Vendor/composer/automoad_psr4.php にマージされます。

return array(
'Afishpapa\\Httptool\\' => array($baseDir . '/src'),
);

クラスマップ

Composer のインストール/更新後、すべての PSR-4 参照は Vendor/composer/autoload_classmap.php にマージされます。
クラスマップを使用して、カスタム読み込みをサポートする非 PSR-0/4 準拠のクラス ライブラリを生成できます。

ファイル

通常、(クラス ライブラリではなく) 関数ライブラリをロードする方法として使用されます。

{
    
    
  "autoload": {
    
    
      "files": ["src/MyLibrary/functions.php"]
  }
}

グローバル構成

-v : メッセージの詳細レベルを上げ、通常どおり出力します
-vv : メッセージの詳細レベルを上げ、より詳細に出力
します -vvv : メッセージの詳細レベルを上げ、デバッグに -h を使用します
: ヘルプを表示します
-q :情報を表示しません
-n : 対話型の質問をしません
-d : 作業ディレクトリを設定します
–ansi: ANSI エンコーディングを強制的に出力します
–no-ansi: ANSI エンコーディングを無効にします
–version (-V): すべてのアプリケーションのバージョンを表示します
–profile:時間とメモリ情報を表示

共通構成

--prefer-install: デフォルト値は dist
dist: ローカル キャッシュの圧縮パッケージを確認します。ベンダー ディレクトリへの直接コピーがある場合は、ローカル キャッシュにない場合は、リモート ウェアハウスに移動して圧縮パッケージをダウンロードします。リモートウェアハウスは圧縮パッケージを提供していないため、github からダウンロードしてみてください にパッケージをインストールし、.git バージョン情報を削除してください つまり、 dist は依存パッケージをすぐにダウンロードしてインストールでき、ほとんどの実稼働環境に適しています。
source: github からソース コードを直接ダウンロードし、.git 情報を保持します。パッケージにカスタム変更を加える必要がある場合、または特別なビルド プロセスが必要な場合は、source を使用する必要があります。
auto: バージョン 2.1 以降非推奨
-o: クラスの読み込みを高速化するために、オートローダー ファイルの最適化されたバージョンを生成します。
-a: デフォルトでは、Composer は、composer.json 内の PSR-4 および PSR-0 構成に基づいてオートローダーを生成します。 --classmap-authoritative オプションを使用して、Composer が PSR-4 および PSR-0 構成を無視できるようにします。クラス ファイルから直接クラス マップを生成し、それをオートローダーの唯一のソースとして使用します。--classmap-authoritative オプションを使用すると、新しいクラス ファイルを追加するときにクラス マップ テーブルを再生成する必要があるなど、いくつかの問題が発生する可能性があることに注意してください。そうしないと、新しく追加されたクラスをオートローダーでロードできなくなります。したがって、パフォーマンスを向上させるために開発環境ではこのオプションを使用し、問題を回避するために実稼働環境では使用しないことをお勧めします。
--dry-run: 実際にパッケージをダウンロードまたはインストールせずに、インストール プロセスの予行演習を実行します。
–dev: テスト フレームワークやデバッグ ツールなどを含む、開発の依存関係をインストールします。

作曲家の初期化

対話的にコンポーザーを初期化する

–name: パッケージ名、形式は作成者/名前 (monolog/monolog など)
–description: 簡単な説明
–author: 作成者名
–type: パッケージのインストール タイプ、デフォルトのライブラリ
library: ファイルをベンダー ディレクトリ
プロジェクトにコピーするだけです: 現在のパッケージはプロジェクトであり、ライブラリ
メタパッケージではありません。依存関係を含む空のパッケージであり、依存関係のインストールをトリガーする必要がありますが、追加のファイルはシステムに書き込まれません。
combos-plugin : 他のパッケージのインストーラーを提供するカスタム インストーラー タイプがあります。
–homepage: 公式 Web サイトのホームページ
–require: インポートパッケージ、形式は package: version foo/bar:1.0.0
–require-dev: 開発コンポーネント
-s: 最小安定性値 devstead
–license (-l): ライセンス
–repository : 1 つ以上の Composer ウェアハウスを指定します
-a: autoload.psr-4 のオブジェクトをcomposer.json に追加します

コンポーザーのインストール

Composer.lock ファイルがある場合、このファイルから依存関係のバージョンが読み取られ、ライブラリのすべての利用者が同じ依存関係のバージョンを取得することが保証されます。
Composer.lock ファイルがない場合は、composer.json ファイルから依存関係のバージョンを読み取り、ベンダー ディレクトリにインストールします。

Composer.lock ファイルがない場合、Composer は依存関係を処理した後にファイルを作成します。

作曲家が必要

パッケージをcomposer.jsonファイルに追加するか、composer.jsonがない場合は作成します。

# 该命令会安装两个不同的软件包
# vendor/package:2.* : 版本号以 2. 开头,后面跟着任何版本号。
# vendor/package2:dev-master : 使用 dev-master 分支。这意味着它将安装该分支的最新版本,通常是开发版本,不属于正式发布。
composer require "vendor/package:2.*" vendor/package2:dev-master

作曲家のアップデート

依存関係の最新バージョンを取得する

# 只更新这两个包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 vendor/package vendor/package2
composer reinstall
重装包,如果不小心改了包文件,可以使用重装命令恢复

# 重装两个包
composer reinstall acme/foo acme/bar

# 重装正则匹配的包
composer.phar reinstall "acme/*"

作曲家チェックプラットフォーム要求

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

作曲家グローバル

global を使用すると、install、remove、require、update などの他のコマンドをグローバルに実行できます。

作曲家検索モノローグ

依存関係の検索

-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
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
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)

作曲家の閲覧 / 作曲家のホーム

ブラウザはこのパッケージの github リポジトリを直接開きます

# 打开这个包的官网
composer browser -H slim/slim
# 打印slim的github仓库链接
composer browser -s slim/slim

作曲家が提案する

あなたの人生の旅路についてアドバイスをください

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

1 additional suggestions by transitive dependencies can be shown with --all
composer fund
```bash
#### 给出你所用的包的捐赠链接

```bash
composer depends / why
```bash
> composer depends 命令用于显示一个包的依赖关系树。如果你要删除一个包之前,可以用这个命令先看看它上面是不是有人

```bash
> 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.jsonを変更する場合は、composer.jsonファイルを送信する前にこのコマンドを実行して確認することをお勧めします。

作曲家のステータス

パッケージを手動で変更し、このパッケージのインストール ソースがsourceである場合、このコマンドを使用してローカル変更レコードを表示できます。これは git status と同等です。

作曲家の自己更新 / 自己更新

Composer プログラムの自己更新

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

作曲家の設定

現在のプロジェクトまたはグローバル構成を変更する

-g: グローバル構成ファイルを変更します
。 –unset: 構成を削除します
。 -l: すべての構成情報を表示します。-g を追加すると、グローバルが表示されます。
–absolute: *-dir の構成は絶対パスを返します。
–append: whenミラーを追加し、より低い優先順位を設定します
--source: 設定のロード元を表示します

# 添加一个测试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": []}'

作曲家作成プロジェクト

プロジェクト/パッケージを作成します。 git clone + combos install と同等です。

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

作曲家ダンプ自動ロード

パッケージ内のクラス名を変更したり、ファイルを追加および削除した後は、このコマンドを実行する必要があります

# -o 选项是为了生产环境中的性能优化,
composer dump-autoload -o
# -a 选项则是为了开发环境中的重新生成类映射。
composer dump-autoload -a

作曲家クリアキャッシュ / クリアキャッシュ / cc

ローカルパッケージキャッシュをクリアする

アーカイブ

リモートからパッケージをダウンロードし、zip/tar アーカイブに圧縮します。

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

実行スクリプト / 実行

このコマンドを実行して手動で行うこともできます。スクリプトの名前を指定するだけです。オプションの --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` 

診断する

現在の Composer 環境が PHP 環境、Composer 構成などのベスト プラクティスに準拠しているかどうかを確認するために使用できます。

監査

現在のプロジェクトの依存関係に既知のセキュリティ脆弱性がないかどうかを確認します。

ヘルプ

help を使用して、指定したコマンドのヘルプ情報を取得します。

php composer.phar help install

おすすめ

転載: blog.csdn.net/heshihu2019/article/details/132327371