如何在 Ubuntu 18.04 上安装和使用 Composer
本教程的先前版本由 Brennen Bearnes 编写。
介绍
Composer 是一种流行的依赖管理 PHP 工具,创建它主要是为了方便项目依赖项的安装和更新。它将检查特定项目依赖于哪些其他包,并根据项目要求使用适当的版本为您安装它们。
在本教程中,您将在 Ubuntu 18.04 系统上安装并开始使用 Composer。
先决条件
要完成本教程,您需要:
- 按照 Ubuntu 18.04 初始服务器设置指南设置一台 Ubuntu 18.04 服务器,包括 sudo 非根用户和防火墙。
第 1 步 — 安装依赖项
在下载和安装 Composer 之前,您需要确保您的服务器安装了所有依赖项。
首先,通过运行更新包管理器缓存:
- sudo apt update
现在,让我们安装依赖项。我们需要 curl
来下载 Composer 和 php-cli
来安装和运行它。 php-mbstring
包是为我们将要使用的库提供功能所必需的。 Composer 使用 git
下载项目依赖,使用 unzip
解压压缩包。一切都可以使用以下命令安装:
- sudo apt install curl php-cli php-mbstring php-curl git unzip
安装先决条件后,我们可以安装 Composer 本身。
第 2 步 — 下载并安装 Composer
Composer 提供了一个用 PHP 编写的安装程序。我们将下载它,验证它没有损坏,然后用它来安装 Composer。
确保您位于主目录中,然后使用 curl
检索安装程序:
- cd ~
- curl -sS https://getcomposer.org/installer -o composer-setup.php
接下来,验证安装程序是否与 Composer 公钥/签名页面上找到的最新安装程序的 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 2.1.9) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
要测试您的安装,请运行:
- composer
你会看到这个输出显示 Composer 的版本和参数。
Output ______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.1.9 2021-10-05 09:47:38
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.
--no-cache Prevent use of the cache
-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(Composer 的官方软件包存储库)上研究合适的开源库。
- 选择你要依赖的包。
- 运行
composer require
将依赖项包含在composer.json
文件中并安装包。
让我们用一个演示应用程序来试试这个。
此应用程序的目标是将给定的句子转换为 URL 友好的字符串 — slug。这通常用于将页面标题转换为 URL 路径(如本教程的 URL 的最后部分)。
让我们从为我们的项目创建一个目录开始。我们称之为 slugify:
- cd ~
- mkdir slugify
- cd slugify
现在是时候在 Packagist.org 上搜索一个可以帮助我们生成 slugs 的包了。如果你在 Packagist 上搜索术语“slug”,你会得到类似这样的结果:

您会在列表中每个包裹的右侧看到两个数字。顶部的数字表示包被安装了多少次,底部的数字表示包在 GitHub 上被加星标的次数。您可以根据这些数字对搜索结果重新排序(查找搜索栏右侧的两个图标)。一般来说,安装量多、star 多的软件包往往更稳定,因为有很多人在使用它们。检查包裹描述的相关性也很重要,以确保它是您所需要的。
我们需要一个简单的字符串到 slug 转换器。从搜索结果来看,包 cocur/slugify
似乎是一个很好的匹配,具有合理的安装量和星数。 (该包比屏幕截图显示的页面更靠下。)
Packagist 上的包有供应商名称和包名称。每个包都有一个唯一标识符(命名空间),其格式与 GitHub 用于其存储库的格式相同,格式为 vendor/package
。我们要安装的库使用命名空间 cocur/slugif
。您需要命名空间才能在您的项目中需要该包。
现在您确切地知道要安装哪个包,运行 composer require
将其作为依赖项包含在内,并为项目生成 composer.json
文件:
- composer require cocur/slugify
当 Composer 下载依赖项时,您将看到此输出:
OutputUsing version ^4.0 for cocur/slugify
./composer.json has been created
Running composer update cocur/slugify
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking cocur/slugify (v4.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Downloading cocur/slugify (v4.0.0)
- Installing cocur/slugify (v4.0.0): Extracting archive
Generating autoload files
从输出中可以看出,Composer 自动决定使用哪个版本的包。如果您现在检查项目的目录,它将包含两个新文件:composer.json
和 composer.lock
,以及一个 vendor
目录:
- ls -l
Outputtotal 12
-rw-rw-r-- 1 sammy sammy 59 Oct 26 19:04 composer.json
-rw-rw-r-- 1 sammy sammy 3411 Oct 26 19:04 composer.lock
drwxrwxr-x 4 sammy sammy 4096 Oct 26 19:04 vendor
composer.lock
文件用于存储有关每个包的安装版本的信息,并确保在其他人克隆您的项目并安装其依赖项时使用相同的版本。 vendor
目录是项目依赖项所在的位置。 vendor
文件夹不需要提交到版本控制中——你只需要包含 composer.json 和 composer.lock 文件。
安装已包含 composer.json
文件的项目时,运行 composer install
以下载项目的依赖项。
让我们快速浏览一下版本限制。如果您检查 composer.json
文件的内容,您会看到如下内容:
- cat composer.json
Output{
"require": {
"cocur/slugify": "^4.0"
}
}
您可能会注意到 composer.json
中版本号前的特殊字符 ^
。 Composer 支持多种不同的约束和格式来定义所需的包版本,以便在提供灵活性的同时保持项目的稳定性。自动生成的 composer.json
文件使用的插入符 (^
) 运算符是推荐的运算符,以实现最大的互操作性,遵循语义版本控制。在这种情况下,它将 4.0 定义为最低兼容版本,并允许更新到 5.0 以下的任何未来版本。
一般来说,您不需要篡改 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 步 — 包含自动加载脚本
由于 PHP 本身不会自动加载类,Composer 提供了一个自动加载脚本,您可以将其包含在项目中以免费获得自动加载。这使得使用依赖项变得更加容易。
您唯一需要做的就是在任何类实例化之前将 vendor/autoload.php
文件包含在您的 PHP 脚本中。当您添加第一个依赖项时,此文件由 Composer 自动生成。
让我们在我们的应用程序中尝试一下。创建文件 test.php
并在文本编辑器中打开它:
- nano test.php
添加以下代码,引入 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 开发人员都应该拥有的强大工具。在本教程中,您安装了 Composer 并在一个简单的项目中使用了它。您现在知道如何安装和更新依赖项了。
除了提供一种简单可靠的方法来管理项目依赖关系之外,它还建立了一个新的事实标准,用于共享和发现由社区创建的 PHP 包。