介绍
Composer是PHP的一种流行的依赖管理工具,主要用于方便项目依赖的安装和更新,它会检查一个特定的项目依赖哪些其他包,并为您安装它们,根据项目要求使用相应的版本。
在本指南中,我们将了解如何在 Debian 10 服务器上安装和使用 Composer。
前提条件
要完成本教程,您将需要一个 Debian 10 服务器通过遵循 Debian 10 初始服务器安装指南设置,包括一个拥有sudo
特权的常规用户。
步骤 1 - 安装依赖
在您可以下载和安装 Composer 之前,我们将确保您的服务器安装了所有依赖。
首先,更新包管理器缓存,运行:
1sudo apt update
现在,让我们安装依赖程序。我们需要‘curl’来下载Composer和‘php-cli’来安装和运行它。‘php-mbstring’包是为我们使用的库提供功能所必需的。‘git’是由Composer用于下载项目依赖程序,而‘unzip’是用于提取包。
1sudo apt install curl php-cli php-mbstring git unzip
有了安装前提条件,我们可以自行安装 Composer。
步骤 2 – 下载和安装 Composer
Composer 提供了 PHP 编写的 installer,我们将下载它,验证它没有被破坏,然后使用它来安装 Composer。
确保您在您的主目录中,然后使用弯曲
来获取安装程序:
1cd ~
2curl -sS https://getcomposer.org/installer -o composer-setup.php
接下来,检查安装程序是否匹配了 [Composer Public Keys / Signatures][composer-sigs] 页面上发现的最新安装程序的 SHA-384 哈希,复制该页面的哈希并将其保存为壳变量:
1HASH=48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5
请确保为突出值取代最新哈希。
现在运行以下PHP脚本来验证安装脚本是否安全运行:
1php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
你会看到下面的结果。
1[label Output]
2Installer verified
如果您看到Installer corrupt
,那么您需要下载安装脚本,并重复检查您是否使用正确的哈希,然后运行命令以再次验证安装程序。
要在全球范围内安装composer
,请使用以下命令,下载并安装composer
作为名为composer
的全系统命令,在/usr/local/bin
下:
1sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
您将看到以下输出:
1[secondary_label Output]
2All settings correct for using Composer
3Downloading...
4
5Composer (version 1.8.6) successfully installed to: /usr/local/bin/composer
6Use it: php /usr/local/bin/composer
要测试您的安装,运行:
1composer
您将看到输出显示 Composer 的版本和参数,类似于此:
1[secondary_label Output]
2 ______
3 / ____/___ ____ ___ ____ ____ ________ _____
4 / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
5/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
6\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
7 /_/
8Composer version 1.8.6 2019-06-11 15:03:05
9
10Usage:
11 command [options] [arguments]
12
13Options:
14 -h, --help Display this help message
15 -q, --quiet Do not output any message
16 -V, --version Display this application version
17 --ansi Force ANSI output
18 --no-ansi Disable ANSI output
19 -n, --no-interaction Do not ask any interactive question
20 --profile Display timing and memory usage information
21 --no-plugins Whether to disable plugins.
22 -d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
23 -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
24
25. . .
这验证了 Composer 已成功安装在您的系统上,并且在整个系统中可用。
<$>[note] 注: 如果您喜欢为您托管在该服务器上的每个项目设有单独的 Composer 执行程序,您可以本地安装它,每个项目的基础上。
要做到这一点,请使用php composer-setup.php
命令,在当前目录中生成一个composer.phar
文件,可以用./composer.phar
命令执行。
现在让我们来看看使用 Composer 来管理 PHP 依赖。
步骤 3 — 在 PHP 项目中使用 Composer
PHP 项目往往依赖于外部库,管理这些依赖和它们的版本可能很困难。
要在您的项目中使用 Composer,您需要一个 composer.json
文件。 composer.json
文件告诉 Composer 需要为您的项目下载哪些依赖,以及允许安装每个软件包的版本。
您不需要手动创建此文件 - 当您这样做时,很容易遇到语法错误. Composer 在使用要求
命令为项目添加依赖时自动生成composer.json
文件. 您可以以同样的方式添加其他依赖,而无需手动编辑此文件。
使用 Composer 作为项目中的依赖程序安装包的过程包括以下步骤:
- 确定应用程序需要哪种类型的库。
- 在 Packagist.org上搜索合适的开源库,该库是Composer的官方包库。
- 选择您想要依赖的包。
*运行
composer require
以将依赖包含在composer.json
文件中,然后安装包。
让我们用一个Demo应用程序来尝试一下。
该应用程序的目的是将一个特定的句子转化为一个URL友好的字符串 - 一个 slug. 这通常用于将页面标题转换为URL路径(如本教程的URL的最终部分)。
让我们开始为我们的项目创建一个目录,我们将其称为 slugify :
1cd ~
2mkdir slugify
3cd slugify
现在是时候搜索 Packagist.org 一个可以帮助我们生成 slugs 的包。
在列表中,你会看到每个包的右侧的两个数字。 顶部的数字代表了该包安装了多少次,而底部的数字显示了一个包在 GitHub上被标注了多少次)。 你可以根据这些数字重新排序搜索结果(搜索搜索栏的右侧的两个图标)。 一般来说,具有更多安装和更多星星的包往往更稳定,因为这么多人正在使用它们。
我们需要一个简单的 string-to-slug 转换器. 从搜索结果中,包 cocur/slugify
似乎是一个很好的匹配,有相当数量的安装和星星。
Packagist 上的包有 **供应商名称和 ** 包的名称.每个包都有一个独特的标识符(一个名称空间)在 GitHub 用于其存储库的相同格式中,在形式供应商/包
。我们想要安装的库使用了名称空间cocur/slugif
。
现在你已经知道要安装哪个软件包了,请运行composer require
,将其列入成依赖,并为该项目生成composer.json
文件:
1composer require cocur/slugify
您将在 Composer 下载依赖时看到以下输出:
1[secondary_label Output]
2Using version ^3.2 for cocur/slugify
3./composer.json has been created
4Loading composer repositories with package information
5Updating dependencies (including require-dev)
6Package operations: 1 install, 0 updates, 0 removals
7 - Installing cocur/slugify (v3.2): Downloading (100%)
8Writing lock file
9Generating autoload files
正如您可以从输出中看到的,Composer 会自动决定使用哪个版本的包. 如果您现在检查您的项目目录,它将包含两个新的文件: composer.json
和 composer.lock
,以及一个 供应商
目录:
1ls -l
1[secondary_label Output]
2total 12
3-rw-r--r-- 1 sammy sammy 59 jul 15 13:53 composer.json
4-rw-r--r-- 1 sammy sammy 2952 jul 15 13:53 composer.lock
5drwxr-xr-x 4 sammy sammy 4096 jul 15 13:53 vendor
composer.lock
文件用于存储有关每个软件包的安装版本的信息,并确保如果其他人克隆您的项目并安装其依赖性时使用相同的版本。
<$>[注]
在安装已包含 composer.json
文件的项目时,请运行 composer install
以下载该项目的依赖性。
让我们快速看看版本限制. 如果你检查你的 composer.json
文件的内容,你会看到这样的东西:
1cat composer.json
1[secondary_label Output]
2{
3 "require": {
4 "cocur/slugify": "^3.2"
5 }
6}
在composer.json中,您可能会在版本号之前注意到特殊字符 ^
。Composer 支持多个不同的限制和格式来定义所需的包版本,以便提供灵活性,同时保持项目稳定性。由自动生成的 composer.json 文件使用的 caret (
^`) 操作员是为最大限度的互操作性推荐的操作员,然后是 语义版本。
一般来说,您不需要在您的 composer.json
文件中篡改版本限制,但是,有些情况可能需要您手动编辑限制,例如,当您发布所需库的主要新版本并希望升级时,或者当您想要使用的库不遵循语义版本。
以下是几个例子,以便您更好地了解 Composer 版本限制如何工作:
Constraint | Meaning | Example Versions Allowed |
---|---|---|
^1.0 | >= 1.0 < 2.0 | 1.0, 1.2.3, 1.9.9 |
^1.1.0 | >= 1.1.0 < 2.0 | 1.1.0, 1.5.6, 1.9.9 |
~1.0 | >= 1.0 < 2.0.0 | 1.0, 1.4.1, 1.9.9 |
~1.0.0 | >= 1.0.0 < 1.1 | 1.0.0, 1.0.4, 1.0.9 |
1.2.1 | 1.2.1 | 1.2.1 |
1.* | >= 1.0 < 2.0 | 1.0.0, 1.4.5, 1.9.9 |
1.2.* | >= 1.2 < 1.3 | 1.2.0, 1.2.3, 1.2.9 |
有关 Composer 版本限制的更深入的观点,请参阅 官方文档。
接下来,让我们看看如何使用 Composer 自动加载依赖。
步骤 4 – 包括 Autoload 脚本
由于PHP本身不会自动加载类,因此Composer提供了自动加载脚本,您可以将其纳入项目中,以免费获得自动加载。
您唯一需要做的就是在任何类型的实例化之前,在您的PHP脚本中添加vendor/autoload.php
文件。
让我们在我们的应用程序中试试。创建文件 test.php
并在文本编辑器中打开它:
1nano test.php
添加以下代码,将vendor/autoload.php
文件带入,加载cocur/slugify
依赖,并使用它来创建一个 slug:
1[label test.php]
2<?php
3require __DIR__ . '/vendor/autoload.php';
4use Cocur\Slugify\Slugify;
5
6$slugify = new Slugify();
7
8echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');
保存文件并离开编辑器。
现在运行剧本:
1php test.php
这产生了hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
的输出。
当新版本发布时,依赖需要更新,所以让我们看看如何处理。
步骤 5 – 更新项目依赖性
每当您想要将项目依赖性更新到更新的版本时,请运行更新
命令:
1composer update
这将检查您在项目中所需的库的更新的版本。如果发现了更新的版本,并且它与composer.json
文件中定义的版本限制相兼容,Composer 将取代之前安装的版本。
您还可以通过这样指定一个或多个特定库来更新它们:
1composer update vendor/package vendor2/package2
请确保在更新依赖性后对您的composer.json
和composer.lock
文件进行更改,以便在项目中工作的任何人都可以访问相同的软件包版本。
结论
Composer 是一个强大的工具,每个 PHP 开发人员都应该在他们的工具带中。 在本教程中,你在 Debian 10 上安装了 Composer,并在一个简单的项目中使用了它。
除了提供一个简单可靠的方式来管理项目依赖性之外,它还为共享和发现社区创建的PHP包建立了一个新的事实标准。