如何在 Debian 9 上安装和使用 Composer

介绍

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

在本教程中,您将安装并开始在 Debian 9 上使用 Composer。

前提条件

要完成本教程,您将需要:

步骤 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=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061

请确保为突出值取代最新哈希。

现在运行以下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.7.2) 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.7.2 2018-08-16 16:57:12
 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. . .

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

<$>[note] 注: 如果您喜欢为您托管在该服务器上的每个项目设有单独的 Composer 执行程序,您可以本地安装它,每个项目的基础上。

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

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

步骤 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 的包。

Packagist Search: easy-slug/easy-slug, muffin/slug, ddd/slug, zelenin/slug, webcastle/slug, anomaly/slug-field_type

在列表中,你会看到每个包的右侧的两个数字。 顶部的数字代表了该包安装了多少次,而底部的数字显示了一个包在 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.1 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.1): Downloading (100%)
8Writing lock file
9Generating autoload files

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

1ls -l
1[secondary_label Output]
2total 12
3-rw-r--r-- 1 sammy sammy 59 Sep 7 16:03 composer.json
4-rw-r--r-- 1 sammy sammy 2934 Sep 7 16:03 composer.lock
5drwxr-xr-x 4 sammy sammy 4096 Sep 7 16:03 vendor

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

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

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

1cat composer.json
1[secondary_label Output]
2{
3    "require": {
4        "cocur/slugify": "^3.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提供了自动加载脚本,您可以将其纳入项目中,以免费获得自动加载。

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

让我们在我们的应用程序中试试。创建文件 test.php 并在文本编辑器中打开它:

1nano test.php

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

1[label test.php]
2<?php require __DIR__ . '/vendor/autoload.php'; 
3use Cocur\Slugify\Slugify;
4
5$slugify = new Slugify();
6
7echo $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 开发人员都应该在他们的工具带中。 在本教程中,你安装了 Composer 在 Debian 9 上,并在一个简单的项目中使用它。

除了提供一个简单可靠的方式来管理项目依赖性之外,它还为共享和发现社区创建的PHP包建立了一个新的事实标准。

Published At
Categories with 技术
Tagged with
comments powered by Disqus