首頁  >  文章  >  開發工具  >  Composer使用教學(基本用法)

Composer使用教學(基本用法)

藏色散人
藏色散人轉載
2019-08-29 14:29:1212914瀏覽

Composer是PHP的一個依賴管理工具,有了它我們就可以輕鬆的使用一個命令將其他優秀程式碼引用到我們的專案中來。以下就由composer使用教學專欄為大家講解Composer的基本使用方法,希望對需要的朋友有幫助!

Composer使用教學(基本用法)

基本用法

#引言

介紹基本用法,我們將安裝monolog /monolog 日誌庫作為範例。如

注意:為簡單起見,我們假定你已經 本地 安裝了 Composer

composer.json:專案設定

如果要在專案中使用 Composer 你需要一個 composer.json 檔案。該文件描述了你的專案依賴關係和其他元資料。

require 鍵

首先(通常也是唯一)應該做的事情就是在你的 composer.json 檔案中定義好 require 鍵。你應該簡要地告訴 Composer 你的專案所依賴的套件有哪些。

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

如上所示, require 取得了一個套件名稱 (例如 monolog/monolog)對應到版本約束 (例如 1.0.*)的 json 物件。

Composer 使用該資訊去「版本庫」中搜索,你在 Composer.json 中註冊的 repositories 鍵所指定的版本倉庫中的相關合適的文件,或是在 Packagist 中預設的包庫。在上述範例中,因為沒有其他在 composer.json 檔案中註冊的版本庫信息,所以它認為 monolog/monolog 包預設是在 Packagist 中。 (更多Packagist 資訊請參閱如下,或在此閱讀更多相關資訊。

套件名稱

套件名稱由供應商名稱和項目名稱組成。通常情況下,這些名稱是相同的,供應商名稱的存在則很好的解決了命名衝突。例如,它允許兩個不同的人創建同樣名為Json 的庫。可以命名為igorw/json 和seldaek/json 。

在這裡您可以閱讀更多有關發布包和包命名的內容。

注意,您還可以指定「平台包」作為依賴項,這允許您自訂某些版本的伺服器軟體。請參閱下面的平台軟體包

套件版本約束

#在上面的範例中,我們引入的monolog 版本指定為1.0.*。這表示任何從1.0 開始的開發分支,它將匹配大於或等於1.0 且小於1.1 的版本。

請閱讀關於版本的更深入信息,如何相互關聯或如何版本控制。

Composer 如何下載正確的檔案?當您在composer.json 中指定一個依賴項時, Composer 首先取得您所要求的套件的名稱,並在已使用庫金鑰註冊的任何儲存庫中搜尋它。如果您沒有註冊任何額外的存儲庫,或者它在您指定的存儲庫中找不到具有該名稱的包,則返回Packagist (下面是詳細說明)。

當Composer 在打包器中找到正確的套件時,或在已指定的套件的儲存庫,它使用套件的VCS (即分支和標籤)的版本化特性來嘗試找到您指定的版本約束的最佳匹配。請務必閱讀有關版本和套件聲明的文章。

注意:如果您試圖取得一個套件,但Composer 拋出關於套件穩定性的錯誤,則您指定的版本可能無法滿足預設的最小穩定性要求。預設情況下,只有在搜尋VCS 中的有效套件版本時才會考慮穩定的版本。

如果你也想獲得DEV、Alpha、Beta 或RC 版本。請閱讀更多關於穩定標誌和minimum-stability key on the schema page。

安裝依賴關係

使用install指令為你的專案安裝已經定義好的依賴關係

php composer.phar install

執行指令,composer 會根據情況透過以下兩種方式中的一種進行安裝

非composer.lock 安裝

如果你之前從未執行過命令就不會出現composer.lock 文件,Composer 只會解析你在composer.json 文件中列出的依賴關係並且下載最近版本到你專案vendor 目錄中( vendor 是專案中存放所有第三方程式碼的常規目錄)。在我們上面的例子中,你最終會在 vendor/monolog/monolog/ 目錄中看到所有 Monolog 的來源檔案。如果 Monolog 有任何依賴,也會出現在 vendor/ 中.

提示:如果你的專案中使用了 git, 或許你希望將 vendor 加入到 .gitignore 中。因為將所有第三方包加入版本庫裡面看起來很愚蠢。

當 Composer 完成安裝後,它將把所有下載的套件和確切的版本資訊寫入到 composer.lock 文件,以此來鎖定專案中第三方套件的版本。你應該將 composer.lock 放在專案倉庫中,以便該專案所有成員都能鎖定在依賴關係相同的版本

使用 composer.lock 檔案安裝

这里来到了第二种安装方式。如果你在运行 composer install 命令之前已经存在了 composer.lock 和 composer.json 文件, 这意味着你之前使用了 install 命令, 或者项目中的其他成员使用了 install 命令并将 composer.lock 文件提交至了项目中 (这是非常好的)。

无论使用哪种方式,存在 composer.lock 文件时使用 install 命令安装依赖时 composer.lock 都会解析并安装你在 composer.json 中所列出来的依赖,但是 Composer 会严格使用 composer.lock 文件列出来的版本来确保项目中的所有成员所安装的版本都是一致的。因此,你可以获得 composer.json 文件列出的所有文件,但是与此同时他们可能并不是最新的可用版本 (一些在 composer.lock 文件中列出的依赖可能会在这个文件创建之后释放了新的版本)。这个是设计上的,这样的设计可以确保你的项目不会因为一些依赖的改变而崩溃。

提交你的 composer.lock 文件至版本控制工具

将此文件提交至 VC 是非常重要的。因为它可以确保项目中的任何人使用的都是与你是完全一致的依赖。 你的 CI 服务器,生产服务器,团队的其他开发人员,所有人都使用的是相同的依赖项,这减轻了仅部署某些部分而引起错误的可能性。即使你独立开发,在你重新安装项目的 6 个月内,你的依赖项发布了许多新的版本,你依然可以确信你的依赖项是可用的。(请参阅下边有关使用 update 的命令。)

更新依赖到最新版本

如上所述,composer.lock 文件将阻止你自动获取最新依赖版本。如果要更新依赖到最新版本,使用 update 命令。这将获取最新匹配的版本(根据你的 composer.json 文件)并将新版本更新到 composer.lock 文件。(这相当于删除 composer.lock 文件并再次运行 install)。

php composer.phar update

注意:当执行 install 命令时,由于 composer.json 的更改可能影响到依赖解析而未更新 composer.lock ,Composer 将显示警告。

如果只是想安装或更新一个依赖,可以将它们列出来:

php composer.phar update monolog/monolog [...]

注意:对于库来说,没必要提交 composer.lock 文件,请参考:库 - 锁文件。

Packagist

Packagist 是 Composer 的主要资源库。一个 Composer 库基本上是一个包的源:一个你可以得到包的地方。

Packagist 的目标是成为一个任何人都可以使用的中央仓库。这意味着你可以 require 那里的任何包,无需指定 Composer 查找包的位置。

当你访问 Packagist 网站 (packagist.org),你可以浏览和搜索包。

建议使用 Composer 的开源项目在 Packagist 上发布包。虽然并不一定需要发布在 Packagist 上来被 Composer 使用,但是它能被其它的开发者更快的发现和采用。

平台包

Composer 将那些已经安装在系统上,但并不是由 Composer 安装的包视为虚拟的平台包。这包括 PHP 本身、PHP 扩展和一些系统库。

php 代表使用的 PHP 版本要求,允许你应用限制,例如 ^7.1 。如果需要 64 位版本的 PHP, 你可以使用 php-64bit 进行限制。

hhvm 代表 HHVM 运行环境的版本,并且允许你应用限制 ,例如,^2.3。

ext- 允许你依赖 PHP 扩展(包括核心扩展)。通常 PHP 拓展的版本可以是不一致的,将它们的版本约束为 * 是一个不错的主意。一个 PHP 扩展包的例子是:ext-gd。

lib- 允许对 PHP 库的版本进行限制。以下可用例子: curl, iconv, icu,libxml,openssl, pcre, uuid, xsl。

你可以使用命令 show --platform 去获取你本地可用的平台包。

自动加载

为了描述包的自动加载信息, Composer 会生成一个 vendor/autoload.php 文件,你可以简单的 include 这个文件,并在无需其它额外工作的情况下就可以使用这些包所提供的类:

require __DIR__ . '/vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');

你甚至可以在 composer.json 中添加一个 autoload 指令,来添加自己的自动加载声明

{
    "autoload": {
        "psr-4": {"Acme\\": "src/"}
    }
}

Composer 会为 Acme 命名空间注册一个 PSR-4 的自动加载.

你定义一个命名空间指向目录的映射。 在 vendor 目录同级的 src 目录将成为你项目的根目录。一个案例,文件名 src/Foo.php 需包含 AcmeFoo 类。

添加 autoload 指令之后,你必需重新运行 dump-autoload 来重新生成 vendor/autoload.php 文件。

包含此文件后也可以接收到一个 autoloader 实例,由因此您可以将 include 调用的返回值存储在变量中并添加更多名称空间,这在测试套件中将会很有用,例如:

$loader = require DIR . '/vendor/autoload.php';
$loader->addPsr4('Acme\Test\', __DIR__);

作为 PSR-4 自动加载规范的补充,Composer 也支持 PSR-0、类表、文件清单的自动加载方式。具体请查询 autoload 引用。

你也可以查阅 optimizing the autoloader 了解关于自动加载器的优化.

注意:

Composer 提供自己的加载器,但如果你不想使用那个而想自己配置加载器的话,你可以试试 include vendor/composer/autoload_*.php 这些文件所返回的关联数组来实现。

以上是Composer使用教學(基本用法)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:aliyun.com。如有侵權,請聯絡admin@php.cn刪除