介绍
Composer是一种流行的PHP 依赖管理工具,主要用于促进项目依赖项的安装和更新。 它将根据项目要求使用适当的版本检查特定项目所依赖的其他软件包并为您安装。
在本教程中,您将在Debian 9上安装并开始使用Composer。
先决条件
要完成本教程,您需要:
- 一个Debian 9服务器按照Debian 9初始服务器设置指南进行设置 ,包括具有
sudo
访问权限和防火墙的非root用户。
第1步 - 安装依赖项
在下载和安装Composer之前,请确保您的服务器已安装所有依赖项。
首先,运行以下命令更新包管理器缓存:
sudo apt update
现在,让我们安装依赖项。 我们需要curl
才能下载Composer和php-cli
来安装和运行它。 php-mbstring
包是为我们将要使用的库提供函数所必需的。 Composer使用git
下载项目依赖项,并unzip
以提取压缩包。 可以使用以下命令安装所有内容:
sudo apt install curl php-cli php-mbstring git unzip
安装了先决条件后,我们可以自行安装Composer。
第2步 - 下载和安装Composer
Composer提供了一个用PHP编写的安装程序 。 我们将下载它,验证它是否已损坏,然后使用它来安装Composer。
确保您在主目录中,然后使用curl
检索安装程序:
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
接下来,验证安装程序是否与[Composer Public Keys / Signatures] [composer-sigs]页面上找到的最新安装程序的SHA-384哈希匹配。 从该页面复制哈希并将其存储为shell变量:
HASH=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061
确保用最新的哈希替换突出显示的值。
现在执行以下PHP脚本以验证安装脚本是否可以安全运行:
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
您将看到以下输出。
Installer verified
如果您看到Installer corrupt
,则需要再次重新下载安装脚本并仔细检查您是否使用了正确的哈希。 然后运行该命令以再次验证安装程序。 获得经过验证的安装程序后,即可继续。
要全局安装composer
,请使用以下命令将下载并安装Composer作为名为composer
的系统范围命令,位于/usr/local/bin
:
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
您将看到以下输出:
OutputAll settings correct for using Composer
Downloading...
Composer (version 1.7.2) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
要测试您的安装,请运行:
composer
你会看到这个输出显示了Composer的版本和参数。
Output ______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.7.2 2018-08-16 16:57:12
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .
这将验证Composer是否已在系统上成功安装,并且可在系统范围内使用。
注意:如果您希望为此服务器上托管的每个项目分别具有Composer可执行文件,则可以在每个项目的基础上在本地安装它。 NPM的用户将熟悉这种方法。 当您的系统用户无权在系统范围内安装软件时,此方法也很有用。
为此,请使用命令php composer-setup.php
。 这将在当前目录中生成一个composer.phar
文件,该文件可以使用./composer.phar command
执行。
现在让我们看一下使用Composer来管理依赖项。
第3步 - 在PHP项目中使用Composer
PHP项目通常依赖于外部库,管理这些依赖项及其版本可能会非常棘手。 Composer通过跟踪您的依赖关系并使其他人可以轻松安装它们来解决这个问题。
要在项目中使用Composer,您需要一个composer.json
文件。 composer.json
文件告诉Composer您需要为项目下载哪些依赖项,以及允许安装每个软件包的哪些版本。 这对于保持项目的一致性并避免安装可能导致向后兼容性问题的不稳定版本非常重要。
您无需手动创建此文件 - 执行此操作时很容易遇到语法错误。 使用require
命令向项目添加依赖项时,Composer会自动生成composer.json
文件。 您可以以相同的方式添加其他依赖项,而无需手动编辑此文件。
使用Composer将程序包作为依赖项安装在项目中的过程包括以下步骤:
- 确定应用程序需要哪种库。
- 在Packagist.org上研究一个合适的开源库, Packagist.org是Composer的官方软件包库。
- 选择您要依赖的包。
- 运行
composer require
在composer.json
文件中包含依赖项并安装该程序包。
让我们用演示应用程序试试吧。
此应用程序的目标是将给定的句子转换为URL友好的字符串 - slug 。 这通常用于将页面标题转换为URL路径(如本教程的URL的最后部分)。
让我们从为项目创建目录开始。 我们称之为slugify :
cd ~
mkdir slugify
cd slugify
现在是时候搜索Packagist.org了解一个可以帮助我们生成slug的软件包。 如果您在Packagist上搜索“slug”一词,您将得到与此类似的结果:
您将在列表中的每个包的右侧看到两个数字。 顶部的数字表示软件包的安装次数,底部的数字表示软件包在GitHub上加星标的次数。 您可以根据这些数字对搜索结果重新排序(查找搜索栏右侧的两个图标)。 一般来说,装有更多装置和更多星星的包装往往更稳定,因为很多人都在使用它们。 检查包装描述的相关性也很重要,以确保它是您所需要的。
我们需要一个简单的string-to-slug转换器。 从搜索结果来看,包cocur/slugify
似乎是一个很好的匹配,具有合理数量的安装和星星。 (该软件包比屏幕截图显示的更深一些。)
Packagist上的软件包具有供应商名称和软件包名称。 每个包都有一个唯一的标识符(命名空间),格式为GitHub用于其存储库的格式为vendor / package
。 我们要安装的库使用命名空间cocur/slugif
。 您需要命名空间才能要求项目中的包。
既然您确切知道要安装哪个软件包,请运行composer require
将其作为依赖项包含在内,并为项目生成composer.json
文件:
composer require cocur/slugify
当Composer下载依赖项时,您将看到此输出:
OutputUsing version ^3.1 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing cocur/slugify (v3.1): Downloading (100%)
Writing lock file
Generating autoload files
从输出中可以看出,Composer自动决定使用哪个版本的软件包。 如果现在检查项目的目录,它将包含两个新文件: composer.json
和composer.lock
,以及vendor
目录:
ls -l
Outputtotal 12
-rw-r--r-- 1 sammy sammy 59 Sep 7 16:03 composer.json
-rw-r--r-- 1 sammy sammy 2934 Sep 7 16:03 composer.lock
drwxr-xr-x 4 sammy sammy 4096 Sep 7 16:03 vendor
composer.lock
文件用于存储有关每个软件包的安装版本的信息,并确保在其他人克隆您的项目并安装其依赖项时使用相同的版本。 vendor
目录是项目依赖项所在的位置。 vendor
文件夹不需要提交到版本控制 - 您只需要包含composer.json和composer.lock文件。
安装已包含composer.json
文件的项目时,请运行composer install
以下载项目的依赖项。
我们来看看版本限制。 如果你检查composer.json
文件的内容,你会看到如下内容:
cat composer.json
Output{
"require": {
"cocur/slugify": "^3.1"
}
}
您可能会注意到composer.json
版本号之前的特殊字符^
。 Composer支持几种不同的约束和格式来定义所需的包版本,以便在保持项目稳定的同时提供灵活性。 自动生成的composer.json
文件使用的插入符号( ^
)是在语义版本控制之后的最大互操作性的推荐运算符。 在这种情况下,它将3.1定义为最小兼容版本,并允许更新到4.0以下的任何未来版本。
一般来说,您不需要在composer.json
文件中篡改版本约束。 但是,某些情况可能需要您手动编辑约束 - 例如,当您发布所需库的主要新版本并且要升级时,或者您要使用的库不遵循语义版本控制时。
以下是一些示例,可帮助您更好地了解Composer版本约束的工作原理:
约束 | 含义 | 允许的示例版本 |
---|---|---|
^ 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步 - 包括自动加载脚本
由于PHP本身不会自动加载类,因此Composer提供了一个自动加载脚本,您可以将其包含在项目中以免费自动加载。 这使得使用依赖项变得更加容易。
您需要做的唯一事情是在任何类实例化之前在PHP脚本中包含vendor/autoload.php
文件。 添加第一个依赖项时,Composer会自动生成此文件。
让我们在我们的应用程序中尝试一下。 创建文件test.php
并在文本编辑器中打开它:
nano test.php
添加以下代码,它cocur/slugify
vendor/autoload.php
文件,加载cocur/slugify
依赖项,并使用它创建一个slug:
<?php require __DIR__ . '/vendor/autoload.php';
use Cocur\Slugify\Slugify;
$slugify = new Slugify();
echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');
保存文件并退出编辑器。
现在运行脚本:
php test.php
这产生了输出hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
。
新版本出现时,依赖关系需要更新,所以让我们来看看如何处理它。
第5步 - 更新项目依赖项
每当您想要将项目依赖项更新为更新版本时,请运行update
命令:
composer update
这将检查项目中所需库的较新版本。 如果找到较新的版本并且它与composer.json
文件中定义的版本约束兼容,则Composer将替换以前安装的版本。 composer.lock
文件将更新以反映这些更改。
您还可以通过如下指定来更新一个或多个特定库:
composer update vendor/package vendor2/package2
更新依赖项后,请务必检入您的composer.json
和composer.lock
文件,以便其他人可以安装这些较新的版本。
结论
Composer是每个PHP开发人员在其实用程序带中应具有的强大工具。 在本教程中,您在Debian 9上安装了Composer并在一个简单的项目中使用它。 您现在知道如何安装和更新依赖项。
除了提供一种简单可靠的方法来管理项目依赖关系之外,它还建立了一个新的事实标准,用于共享和发现社区创建的PHP包。