ホームページ 見出し PHP 開発者が知っておくべきパッケージの依存関係管理ツール: Composer

PHP 開発者が知っておくべきパッケージの依存関係管理ツール: Composer

Jan 07, 2020 pm 05:48 PM
composer php

PHP 開発者が知っておくべきパッケージの依存関係管理ツール: Composer

Composer は、非常に人気のある PHP パッケージの依存関係管理ツールです。PEAR パッケージ マネージャーに取って代わりました。PHP 開発者は Composer をマスターする必要があります。

ユーザー向け, Composer は非常にシンプルです。簡単なコマンドで必要なコード パッケージをベンダー ディレクトリにダウンロードでき、開発者はパッケージを導入して使用できます。

鍵はプロジェクト コンポーザーの定義にあります。 json では、プロジェクトが依存する必要があるパッケージ (複数の可能性があります) を定義でき、依存パッケージは他のパッケージに依存する場合があります (これはコンポーネントの利点です)。これらについて心配する必要はありません。必要なものはすべて自動的にダウンロードされます。すべてはcomposer.jsonの定義にあります。

Composerはユーザーにとって非常に透過的ですが、その背後にある概念を理解する必要があり、その誕生は偶然ではありません、ありがとうGithub の速度に合わせて Composer の開発により、PHP 言語はますます最新のものになり、ますます高度になっているように見えます。

Composer を理解するには、まず一般的な言語を理解する必要があります。構造の理解:

Composer の構造

##Composer コマンド ライン ツール:

これを理解するのは比較的簡単です。ユーザー定義 Composer.json を使用して、必要なコードをダウンロードします。単純に Composer を使用するだけであれば、いくつかの特定のコマンドを習得できます。

コードの自動読み込みloader:

Composer を介して、開発者はさまざまな方法で Composer を使用できますが、その鍵は PHP の名前空間の概念と PSR-4 標準の開発にあります。Composer は自動コードのみを開発しました。これら 2 つに基づくローダー

Github:

Github を使用すると、PHP 開発者はオープン ソース コードをホストでき、Composer の開発は Github から始まりました。Composer は基本的にダウンロードします。 Github のコード ローカルに移動します。

Packagist:

ユーザーの場合、Composer のコマンド ライン ツールが使用されますが、コマンド ライン ツールはどのようにしてその数を知るのでしょうか。ユーザーはパッケージを使用できますか? そうですね、これは主に Packagist に依存しています。Packagist は Composer の主要なパッケージ情報リポジトリです。パッケージ開発者は Github で特定のコードをホストし、パッケージ情報を Packagist に送信するため、ユーザーは Composer を通じてパッケージ情報を使用できます。

Composer は、ローカルに定義された作曲家.json 情報に基づいて Packagist にクエリを実行します。Packagist は、Composer.json/Package.json に基づいて情報を解析し、最終的に github リポジトリに対応します。Composer が最終的にコードをダウンロードするとき、コードは Github にも依存します。

Composer.json:

これは Composer のコアです。 . Composer のルール、Composer.json の 3 種類についても上で説明しました。使用する際には区別に注意する必要があります。私は最初に学んだときはいつも失敗してしまいました。

Composer コマンド ライン ツール

composer init

ユーザーは、自分のプロジェクトの下にcomposer.jsonを作成して、プロジェクトの依存関係パッケージを定義できます。これらは、composer init を対話的に渡すことができ、composer.json を作成します。

composer install

は、最も一般的に使用されるコマンドです。Composer は、ローカルの Composer に基づいてインストール パッケージをダウンロードします.json パッケージをプロジェクトの下のベンダー ディレクトリに置き、インストール中にパッケージのバージョン情報をcomposer.lockに入れてバージョンをロックします。

実際には、インストール中にcomposer.lockのバージョンが見つかった場合、現在のバージョンと同じであること ベンダー ディレクトリ内のコード バージョンが同じである場合、Composer は何も行いません。composer.lock の目的は、パッケージの最新バージョンを取得しなくても、現在のバージョンで作業できるようにすることです。

composer update

では、composer.lock を更新してパッケージの最新バージョンを取得するにはどうすればよいですか? このコマンドを使用して、パッケージの最新バージョンを更新します

composer config

このコマンドを理解することをお勧めします。グローバル構成は COMPOSER_HOME/config.json に保存され、非グローバル構成情報はプロジェクト ディレクトリに保存されます.

composer config --list -g
composer config -g notify-on-install false
composer global config bin-dir --absolute
composer create-project
ログイン後にコピー

このコマンドは一般的には使用されません。しかし、個人的には依然として非常に重要だと思います。通常の install コマンドを使用すると、プロジェクトのすべての依存パッケージがプロジェクトのベンダー ディレクトリにダウンロードされます。 git clone コマンドが実行されるため、通常、パッケージ開発者はこのコマンドを使用してバグを修正します。

##これはグローバル インストール コマンドです。これを使用すると、インストールや更新などの COMPOSER_HOME ディレクトリで Composer コマンドを実行できます。もちろん、COMPOSER_HOME は $PATH 環境にある必要があります。

たとえば、composer global require fabpot/php-cs-fixer を実行すると、php -cs-fixer コマンド ラインをグローバルに実行できるようになります。後で更新したい場合は、composer global update を実行してください

composer dump-autoload

プロジェクトを変更するときは、このコマンドを説明するために「練習」の下にあるcomposer update コマンドを実行してcomposer.jsonファイルを更新する必要はありません。

作曲家が必要

假如手动或者交互式创建composer.json文件,可以直接使用该命令来安装包

composer require  cerdic/css-tidy:1.5.2
composer require "ywdblog/phpcomposer:dev-master"
ログイン後にコピー

–prefer-source和–prefer-dist参数

–prefer-dist:对于稳定的包来说,一般Composer安装默认使用该参数,这也能加快安装,比如有可能直接从packagist安装了相应的包,而不用实际去Github上下载包.

–prefer-source:假如使用该参数,则会直接从Github上安装,安装包后vendor目录下还含有.git信息

composer require "ywdblog/phpcomposer:dev-master" --prefer-source
#在vendor/ywdblog/phpcomposer目录下含有.git信息
ログイン後にコピー

如何给Composer添加代理

在国内使用Composer下载特别慢,可以通过二个方法进行加速

composer config repo.packagist composer “https://packagist.phpcomposer.com“

编辑composer.json

"repositories": {
  "packagist": {
      "type": "composer",
      "url": "https://packagist.phpcomposer.com"
  }
}
ログイン後にコピー

Autoloading代码加载器

composer本身集成一个autoloader,支持PSR-4,PSR-0,classmap,files autoloading.

这里通过一个例子来说明通过Composer如何引用classmap,files,本地符合PSR-4标准的代码

编辑composer.json

"autoload": {
  "classmap": ["othsrc/","classsrc.php"],
  "files": ["othsrc/filesrc.php"],
  "psr-4": {"Foo\Bar\": "src"}  }
ログイン後にコピー

composer dump-autoload

通过上述的操作,对于PSR-4来说等同注册了一个PSR-4 autoloader(从FooBar命名空间)

假如不想使用Composer的autoloader,可以直接包含vendor/composer/autoload_*.php文件,配置自己的加载器.

具体的例子托管在github上,可参考.

Repositories

关于Repositories,了解其不是必须的,但是假如掌握则更能理解Composer,对于Repositories,其中文文档和英文文档解释的很好,这里也进行了一些摘抄.

基本概念

包:

Composer是一个依赖管理工具,它在本地安装一些资源包和包的描述(比如包名称和对应的版本),比较重要的元数据描述是dist和source,dist指向一个存档,该存档是对一个资源包的某个版本的数据进行的打包.source指向一个开发中的源,这通常是一个源代码仓库(比如git)

资源库:

一个资源库是一个包的来源.它是一个packages/versions的列表.

Composer将查看所有你定义的repositories以找到项目需要的资源包(这句话很重要).

默认情况下已经将http://Packagist.org注册到Composer(或者理解为http://Packagist.org是Composer资源库默认的仓库类型)

Composer资源库类型

Composer资源库包括四种类型,默认的是composer类型,也就是http://packagist.org所使用的资源类型.

它使用一个单一的packages.json文件,包含了所有的资源包元数据.当你将包发布到http://pckagist.org上,则默认系统会创建一个packages.json,不过我没有找到我的包对应的文件.

VCS资源库类型

假如你想构建一个私有的Composer私有资源库类型,可以使用该类型,这里举一个例子,比如你在自己项目的composer.json定义如下,则就可以使用对应的Github上的代码了.

{
    "repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/ywdblog/phpcomposer"
    }
    ],
    "require": {
        "ywdblog/phpcomposer": "dev-master"
    }
}
ログイン後にコピー

当运行composer update的时候,Comoser实际上是从Github上下载包而不是从http://pckagist.org上下载.

另外假如需要使用Package资源库类型或者PEAR资源库类型,参考官方文档即可,一般在composer.json中定义name、version属性即可.

Composer.json

在本文上面也多次提到了composer.json,比如你希望使用第三方包则需要在本地定义composer.json,Composer安装第三方包后,也会在第三方包目录下发现composer.json,那么这二者都叫composer.json,有什么区别呢?理解这非常的重要.

假如你在自己的项目下面定义一个composer.json,则这个包称之为ROOT包,这个composer.json定义你项目需要的条件(比如你的项目可能依赖一个第三方包).

composer.json中有些属性只能被ROOT包使用,比如config属性只在ROOT包中生效.

一个资源包是不是ROOT包,取决于它的上下文,比如你git clone ywdblog/phpcomposer,则这时候本地phpcomposer目录就是ROOT包,假如你在本地phpcomposer目录下composer require ywdblog/phpcomposer,则这时候你的项目phpcomposer就是ROOT包.

了解composer-schema.json可参考该网址,Laravel作为一个成熟的框架,其定义的composer.json非常经典

关于包的版本

当使用者在本地配置composer.json的时候,可以指定需要包的特定版本,Composer支持从Github仓库中下载Tag或者分支下的包.

对于Github上的Tag来说,Packagist会创建对应包的版本,它符合X.Y.Z,vX.Y.Z,X.Y.Z-包类型,就是说Github上虽然只有一个特定版本的包,但Composer支持多种形式的引用方式,比如:

composer require monolog/monolog  1.0.0-RC1
composer require monolog/monolog  v1.0.0-RC1
composer require monolog/monolog  1.0.*
composer require monolog/monolog  ~1.10
ログイン後にコピー

对于Github上的分支来说,Packagist会创建对应包的版本,假如分支名看起来像一个版本,将创建{分支名}-dev的包版本号,如果分支名看起来不像一个版本号,它将会创建dev-{分支名}形式的版本号

总结:

理解Composer,最重要的是实践,最后也能明白PSR-4和命名空间,也可以尝试将你的项目发布到http://pckagist.org上.

PHP中文网,有大量免费的PHP教程,欢迎大家学习!

本文转自:https://www.jianshu.com/p/d8bb33c53482

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 Apr 18, 2025 am 09:24 AM

CraftCMSを使用してWebサイトを開発する場合、特にCSSやJavaScriptファイルを頻繁に更新する場合、リソースファイルのキャッシュ問題が発生することがよくあります。古いバージョンのファイルがブラウザによってキャッシュされ、ユーザーが最新の変更を表示しないようにすることがあります。この問題は、ユーザーエクスペリエンスに影響を与えるだけでなく、開発とデバッグの難しさを高めます。最近、プロジェクトで同様のトラブルに遭遇し、いくつかの調査の後、プラグインWiejeben/Craft-Laravel-Mixが見つかりました。

PHPの継続的な使用:その持久力の理由 PHPの継続的な使用:その持久力の理由 Apr 19, 2025 am 12:23 AM

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

ドクトリンエンティティのシリアル化効率を改善:Sidus/Doctrine-Serializer-Bundleの適用 ドクトリンエンティティのシリアル化効率を改善:Sidus/Doctrine-Serializer-Bundleの適用 Apr 18, 2025 am 11:42 AM

多数の教義エンティティを含むプロジェクトに取り組んでいるとき、私は厳しい問題を抱えていました。エンティティがシリアル化され、脱必要にされるたびに、パフォーマンスは非常に非効率的になり、システムの応答時間が大幅に増加します。複数の最適化方法を試しましたが、うまくいきません。幸いなことに、Sidus/Doctrine-Serializer-Bundleを使用することで、この問題をうまく解決し、プロジェクトのパフォーマンスを大幅に改善しました。

作曲家を使用して、推奨システムのジレンマを解決する:Andres-Montanez/推奨 作曲家を使用して、推奨システムのジレンマを解決する:Andres-Montanez/推奨 Apr 18, 2025 am 11:48 AM

eコマースのWebサイトを開発するとき、私は困難な問題に遭遇しました。ユーザーにパーソナライズされた製品の推奨事項を提供する方法です。当初、私はいくつかの簡単な推奨アルゴリズムを試しましたが、結果は理想的ではなく、ユーザーの満足度も影響を受けました。推奨システムの精度と効率を改善するために、より専門的なソリューションを採用することにしました。最後に、Andres-Montanez/Adcumentations Bundleを介してAndres-Montanez/Bundleをインストールしました。これは、問題を解決しただけでなく、推奨システムのパフォーマンスを大幅に改善しました。次の住所から作曲家を学ぶことができます。

作曲家との電子メールマーケティングを簡素化する方法:duwa.ioのアプリケーションプラクティス 作曲家との電子メールマーケティングを簡素化する方法:duwa.ioのアプリケーションプラクティス Apr 18, 2025 am 11:27 AM

メールマーケティングキャンペーンを行う際には、HTML形式でメールを効率的に作成および送信する方法を実行する際に、トリッキーな問題が発生しています。従来のアプローチは、コードを手動で記述し、SMTPサーバーを使用して電子メールを送信することですが、これは時間がかかるだけでなく、エラーが発生しやすいことです。複数のソリューションを試した後、HTMLメールの作成と送信に役立つシンプルで使いやすいRestapiであるduwa.ioを発見しました。開発プロセスをさらに簡素化するために、Composerを使用してDuwa.ioのPHPライブラリ-CaptainDoe/Duwaをインストールおよび管理することにしました。

Composerを使用してFecmall Advanced Projectテンプレートをすばやく構築する方法 Composerを使用してFecmall Advanced Projectテンプレートをすばやく構築する方法 Apr 18, 2025 am 11:45 AM

eコマースプラットフォームを開発する場合、適切なフレームワークとツールを選択することが重要です。最近、機能が豊富なeコマースのウェブサイトを構築しようとしていたとき、私は困難な問題に遭遇しました。スケーラブルで完全に機能的なeコマースプラットフォームをすばやく構築する方法です。複数のソリューションを試してみて、FecmallのAdvanced Projectテンプレート(Fecmall/FBBCBase-App-Advanced)を選択することになりました。 Composerを使用することにより、このプロセスは非常にシンプルで効率的になります。作曲家は次のアドレスを通して学ぶことができます:学習アドレス

Laravelインストールコード Laravelインストールコード Apr 18, 2025 pm 12:30 PM

Laravelをインストールするには、これらの手順を順番に進みます。コンポーザー(MacOS/LinuxとWindows用)インストールLaravelインストーラーをインストールします。