如何在 Ubuntu 18.04 上安装和使用 Composer
Composer 是 PHP 的依赖管理器(类似于 Node.js 的 npm 或 Python 的 pip )。 Composer 将引入您项目所依赖的所有必需 PHP 包并为您管理它们。
在本教程中,我们将向您展示如何在 Ubuntu 18.04 计算机上安装和使用 Composer 。 Ubuntu 16.04 可以使用相同的步骤。
先决条件
在继续学习本教程之前,请确保以具有 sudo 权限的用户身份登录,并且在 Ubuntu 18.04 系统上安装了 PHP 。
安装 Composer
要在 Ubuntu 系统上安装 Composer ,请按照下列步骤操作:
-
在下载和安装 Composer 之前,首先更新软件包索引并安装必要的包:
sudo apt update sudo apt install wget php-cli php-zip unzip
-
现在我们已经在我们的机器上安装了 php-cli ,我们可以下载 composer 安装程序:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
上面的命令将在当前工作目录中下载
composer-setup.php
文件。 -
接下来,我们需要比较脚本文件的
SHA-384
哈希值与 Composer 公钥/签名页面上找到的最新安装程序哈希值, 来验证脚本的数据完整性。我们将使用以下 wget 命令从 Composer 的 Github 页面下载最新 Composer 安装程序的预期签名,并将其存储在名为
HASH
的变量中:HASH="$(wget -q -O - https://composer.github.io/installer.sig)"
现在运行以下命令以验证安装脚本是否已损坏:
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 安装脚本并通过echo $HASH
仔细检查$HASH
变量的值。验证安装程序后,您可以继续执行下一步。 -
以下命令将在
/usr/local/bin
目录中安装 Composer :sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
All 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
上面的命令将打印 Composer 的版本,命令和参数。
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.7.2 2018-08-16 16:57:12 Usage: command [options] [arguments]
如果您希望每个项目安装独立的 Composer ,请使用以下命令
php composer-setup.php
,它将在您当前的工作目录中创建一个名为composer.phar
的文件。你可以通过运行./composer.phar
来使用 Composer.
Composer 入门
现在,在您的 Ubuntu 系统上安装了 Composer ,我们将向您展示如何在 PHP 项目中使用 Composer 。
第一步是创建一个目录,该目录将作为项目根目录,包含了 composer.json
文件。此文件描述了您的 PHP 项目,包括 PHP 依赖项和其他元数据。
创建项目目录并切换到它:
mkdir ~/my-first-composer-project
cd ~/my-first-composer-project
下一步是使用 composer require <package name>
命令初始化新的 composer.json
并指定我们要下载的包。
在此示例中,我们将创建一个示例应用程序,该应用程序将使用名为 carbon 的包打印当前时间。
运行以下命令初始化新的 composer.json
并安装 carbon 包:
composer require nesbot/carbon
Using version ^1.33 for nesbot/carbon
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Installing symfony/polyfill-mbstring (v1.9.0): Downloading (100%)
- Installing symfony/translation (v4.1.4): Downloading (100%)
- Installing nesbot/carbon (1.33.0): Downloading (100%)
symfony/translation suggests installing symfony/config
symfony/translation suggests installing symfony/yaml
symfony/translation suggests installing psr/log-implementation (To use logging capability in translator)
Writing lock file
Generating autoload files
正如您从上面的输出中看到的, Composer 将创建该 composer.json
文件,它将下载并安装 carbon 及其所有依赖项。
如果你列出你的项目目录,你会看到它包含 composer.json
, composer.lock
两个文件和 vendor
目录。
ls -l
-rw-r--r-- 1 buzheng users 60 Aug 29 00:50 composer.json
-rw-r--r-- 1 buzheng users 6.8K Aug 29 00:50 composer.lock
drwxr-xr-x 5 buzheng users 4.0K Aug 29 00:50 vendor
- 目录
vendor
存储项目依赖项。 composer.lock
包含所有已安装软件包的列表,包括确切的软件包版本。composer.json
描述了 PHP 项目和所有 PHP 依赖项。
您可以在 Composer 软件仓库 Packagist 中搜索 PHP 包。
Composer 提供自动加载功能,允许我们在不需要 require
或 include
的情况下使用 PHP 类。
创建一个名为的文件 testing.php
并添加以下代码:
<?php
require __DIR__ . '/vendor/autoload.php';
use Carbon\Carbon;
printf("Now: %s", Carbon::now());
让我们逐行分析代码。
在打开 php 标签之后的第一行中,我们包含了 Composer 自动生成的文件 vendor/autoload.php
,该文件将自动加载所有库。
接下来我们给 Carbon\Carbon
创建别名 Carbon
, 最后一行是使用 Carbon 的 now
方法打印当前时间。
键入以下命令运行脚本:
php testing.php
输出应该如下所示:
Now: 2018-08-28 23:47:19
稍后,如果要更新 PHP 包,只需运行:
composer update
上面的命令将检查已安装软件包的较新版本,如果找到较新版本且与 composer.json
中指定的版本约束匹配,则 Composer 将更新软件包。
结论
您已经学习了如何在 Ubuntu 18.04 计算机上安装 Composer 。我们还向您展示了如何使用 Composer 创建基本的 PHP 项目。
要查找有关 Composer 的更多信息,请访问 Composer 官方文档页面。