如何在 Ubuntu 22.04 上安装和使用 Composer

介绍

Composer是PHP的一种流行的依赖管理工具,主要用于方便项目依赖的安装和更新,它会检查一个特定的项目依赖哪些其他包,并为您安装它们,根据项目要求使用相应的版本。

在本教程中,您将安装并在Ubuntu 22.04系统上开始使用Composer。

前提条件

要遵循本指南,您将需要访问 Ubuntu 22.04 服务器作为非根sudo用户,并在您的服务器上启用防火墙。

步骤 1 — 安装 PHP 和其他依赖

除了已经在 Ubuntu 22.04 系统中包含的依赖性之外,例如gitcurl,Composer 还需要php-cli来执行命令行中的 PHP 脚本,以及unzip来提取 zip 档案。

首先,更新包管理器缓存,运行:

1sudo apt update

接下来,运行以下命令来安装所需的包:

1sudo apt install php-cli unzip

您将被要求通过键入Y,然后ENTER来确认安装。

安装前提条件后,您可以继续安装 Composer。

步骤 2 – 下载和安装 Composer

Composer 提供一个以 PHP 编写的 [installer] 脚本,我们将下载它,验证它没有被破坏,然后使用它来安装 Composer。

确保您在您的主目录中,然后使用弯曲来获取安装程序:

1cd ~
2curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php

接下来,我们将检查下载的安装程序是否匹配了 Composer Public Keys / Signatures页面上发现的最新安装程序的 SHA-384 哈希。

1HASH=`curl -sS https://composer.github.io/installer.sig`

如果您想要验证获得的值,您可以运行:

1echo $HASH
1[secondary_label Output]
2906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8

现在,按照Composer 下载页面提供的下面的PHP代码执行,以验证安装脚本是否安全运行:

1php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

您将看到以下输出:

1[label Output]
2Installer verified

如果输出说安装程序破坏,你需要再次下载安装脚本并重复检查你是否使用正确的哈希,然后重复验证过程。

要在全球范围内安装composer,请使用以下命令,下载并安装composer作为名为composer的全系统命令,在/usr/local/bin下:

1sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer

你会看到类似于此的输出:

1[secondary_label Output]
2All settings correct for using Composer
3Downloading...
4
5Composer (version 2.3.5) successfully installed to: /usr/local/bin/composer
6Use it: php /usr/local/bin/composer

要测试您的安装,运行:

1composer
 1[secondary_label Output]
 2   ______
 3  / ____/___ ____ ___ ____ ____ ________ _____
 4 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
 5/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
 6\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
 7                    /_/
 8Composer version 2.3.5 2022-04-13 16:43:00
 9
10Usage:
11  command [options] [arguments]
12
13Options:
14  -h, --help Display help for the given command. When no command is given display help for the list command
15  -q, --quiet Do not output any message
16  -V, --version Display this application version
17      --ansi|--no-ansi Force (or disable --no-ansi) ANSI output
18  -n, --no-interaction Do not ask any interactive question
19      --profile Display timing and memory usage information
20      --no-plugins Whether to disable plugins.
21      --no-scripts Skips the execution of all scripts defined in composer.json file.
22  -d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
23      --no-cache Prevent use of the cache
24  -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
25. . .

这验证了 Composer 已成功安装在您的系统上,并且在整个系统中可用。

<$>[注] ** 注意:** 如果您希望在本服务器上托管的每个项目都有单独的 Composer 执行程序,则可以本地安装,以项目为基础。

要做到这一点,请使用php /tmp/composer-setup.php命令,在当前目录中生成一个composer.phar文件,可以用php composer.phar执行。

现在让我们看看使用 Composer 来管理依赖。

步骤 3 — 在 PHP 项目中使用 Composer

PHP 项目往往依赖于外部库,管理这些依赖和它们的版本可能很困难。Composer 通过跟踪项目版本和依赖来解决这个问题,同时也促进了项目所需的包的查找、安装和更新过程。

要在您的项目中使用 Composer,您需要一个 composer.json 文件。 composer.json 文件告诉 Composer 需要为您的项目下载哪些依赖,以及允许安装每个软件包的版本。

Composer 提供了基于用户输入创建一个新的 composer.json 文件的交互式方法,这是一个很好的选择,如果您计划在 [Packagist] 上稍后将项目共享为公共包(https://packagist.org/). Composer 还在运行 composer require 命令时自动生成 barebones composer.json 文件,以在新创建的项目中包含依赖性。

使用 Composer 作为项目中的依赖程序安装包的过程包括以下步骤:

  • 确定应用程序需要哪种类型的库。
  • Packagist.org上搜索合适的开源库,该库是Composer的官方包库。
  • 选择您想要依赖的包。 *运行composer require以将依赖包含在composer.json文件中,然后安装包。

让我们用一个Demo应用程序来尝试一下。

该应用程序的目的是将一个特定的句子转化为一个URL友好的字符串 - 一个 slug. 这通常用于将页面标题转换为URL路径(如本教程的URL的最终部分)。

让我们开始为我们的项目创建一个目录,我们将其称为 slugify :

1cd ~
2mkdir slugify
3cd slugify

虽然不需要,现在你可以运行一个composer init命令来为你的项目创建一个详细的composer.json文件. 因为我们的项目的唯一目标是展示如何使用Composer安装依赖,我们将使用一个更简单的composer.json文件,当我们需要我们的第一个包时,它将自动生成。

现在是时候搜索 Packagist.org 一个可以帮助我们生成 slugs 的包。

Packagist Search Results for the term "slug"

在列表中,你会看到每个包的右侧的两个数字。 顶部的数字代表了通过Composer安装了多少次,而底部的数字显示了一个包在GitHub上出现了多少次。 一般来说,具有更多安装和更多星的包往往更稳定,因为这么多人正在使用它们。

我们需要一个 string-to-slug 转换器. 从搜索结果中,在该页面中出现的第一个结果的包 cocur/slugify 似乎是一个很好的匹配,具有合理的安装量和星星。

Packagist 上的包有 **供应商名称和 ** 包的名称.每个包都有一个独特的标识符(一个名称空间)在 GitHub 用于其存储库的相同格式中: vendor/package. 我们想要安装的库使用名称空间 cocur/slugify. 您需要一个包的名称空间才能在您的项目中要求它。

现在你知道你想要安装哪个软件包,你可以运行composer require以将其列为依赖,并为你的项目生成composer.json文件。在要求软件包时,重要的一件事是 Composer 跟踪应用层次依赖以及系统层次依赖。

当一个所需的包依赖于目前尚未安装在您的服务器上的系统库时,您将收到一个错误消息,说明哪个要求缺少:

1composer require cocur/slugify:4.1
 1[secondary_label Output]
 2./composer.json has been created
 3Running composer update cocur/slugify
 4Loading composer repositories with package information
 5Updating dependencies
 6Your requirements could not be resolved to an installable set of packages.
 7
 8  Problem 1
 9    - Root composer.json requires cocur/slugify 4.1 -> satisfiable by cocur/slugify[v4.1.0].
10    - cocur/slugify v4.1.0 requires ext-mbstring * -> it is missing from your system. Install or enable PHP's mbstring extension.
11...

为了解决系统依赖问题,我们可以使用apt search来搜索缺失的包:

1apt search mbstring
 1[secondary_label Output]
 2Sorting... Done
 3Full Text Search... Done
 4php-mbstring/jammy 2:8.1+92ubuntu1 all
 5  MBSTRING module for PHP [default]
 6
 7php-symfony-polyfill-mbstring/jammy 1.24.0-1ubuntu2 all
 8  Symfony polyfill for the Mbstring extension
 9
10php8.1-mbstring/jammy 8.1.2-1ubuntu2 amd64
11  MBSTRING module for PHP

找到正确的包名称后,您可以再次使用apt来安装系统依赖:

1sudo apt install php-mbstring

安装完成后,您可以再次运行composer require命令:

1composer require cocur/slugify
 1[secondary_label Output]
 2Using version ^4.1 for cocur/slugify
 3./composer.json has been created
 4Running composer update cocur/slugify
 5Loading composer repositories with package information
 6Updating dependencies
 7Lock file operations: 1 install, 0 updates, 0 removals
 8  - Locking cocur/slugify (v4.1.0)
 9Writing lock file
10Installing dependencies from lock file (including require-dev)
11Package operations: 1 install, 0 updates, 0 removals
12  - Installing cocur/slugify (v4.1.0): Extracting archive
13Generating autoload files

正如您可以从输出中看到的,Composer 会自动决定使用哪个版本的包. 如果您现在检查您的项目目录,它将包含两个新的文件: composer.jsoncomposer.lock,以及一个 供应商 目录:

1ls -l
1[secondary_label Output]
2total 12
3-rw-r--r-- 1 sammy sammy 59 Apr 18 14:17 composer.json
4-rw-r--r-- 1 sammy sammy 3462 Apr 18 14:17 composer.lock
5drwxr-xr-x 4 sammy sammy 4096 Apr 18 14:17 vendor

composer.lock文件用于存储有关每个软件包的安装版本的信息,并确保如果其他人克隆您的项目并安装其依赖性时使用相同的版本。

<$>[注] 在安装已包含 composer.json 文件的项目时,请运行 composer install 以下载该项目的依赖性。

让我们快速看看版本限制. 如果你检查你的 composer.json 文件的内容,你会看到这样的东西:

1cat composer.json
1[secondary_label Output]
2{
3    "require": {
4        "cocur/slugify": "^4.1"
5    }
6}

在composer.json中,您可能会在版本号之前注意到特殊字符 ^。Composer 支持多个不同的限制和格式来定义所需的包版本,以便提供灵活性,同时保持项目稳定性。由自动生成的 composer.json 文件使用的 caret (^`) 操作员是建议的操作员,以获得最大程度的互操作性,然后是 语义版本

一般来说,您不需要在您的 composer.json 文件中篡改版本限制,但是,有些情况可能需要您手动编辑限制,例如,当您发布所需库的主要新版本并希望升级时,或者当您想要使用的库不遵循语义版本。

以下是几个例子,以便您更好地了解 Composer 版本限制如何工作:

ConstraintMeaningExample Versions Allowed
^1.0>= 1.0 < 2.01.0, 1.2.3, 1.9.9
^1.1.0>= 1.1.0 < 2.01.1.0, 1.5.6, 1.9.9
~1.0>= 1.0 < 2.0.01.0, 1.4.1, 1.9.9
~1.0.0>= 1.0.0 < 1.11.0.0, 1.0.4, 1.0.9
1.2.11.2.11.2.1
1.*>= 1.0 < 2.01.0.0, 1.4.5, 1.9.9
1.2.*>= 1.2 < 1.31.2.0, 1.2.3, 1.2.9

有关 Composer 版本限制的更深入的观点,请参阅 官方文档

接下来,让我们看看如何使用 Composer 自动加载依赖。

步骤 4 – 包括 Autoload 脚本

由于PHP本身不会自动加载类,因此Composer提供了一个自动加载脚本,您可以将其纳入项目中,以便为您的项目进行自动加载。

您唯一需要做的就是在任何类的实例化之前,将vendor/autoload.php文件纳入您的PHP脚本中。

让我们在我们的演示应用程序中尝试一下,在文本编辑器中打开一个名为test.php的新文件:

1nano test.php

添加以下代码,将vendor/autoload.php文件带入,加载cocur/slugify依赖,并使用它来创建一个 slug:

1[label test.php]
2<?php
3require __DIR__ . '/vendor/autoload.php';
4
5use Cocur\Slugify\Slugify;
6
7$slugify = new Slugify();
8
9echo $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.jsoncomposer.lock文件,以便其他人也可以安装这些更新的版本。

结论

Composer 是一个强大的工具,可以极大地促进 PHP 项目中的依赖性管理工作,它提供了一个可靠的方法来发现,安装和更新一个项目所依赖的 PHP 包,在本指南中,我们看到如何安装 Composer,如何在项目中包含新的依赖性,以及如何在新版本可用时更新这些依赖性。

Published At
Categories with 技术
comments powered by Disqus