如何在Ubuntu16.04上安装和使用Composer

来自菜鸟教程
跳转至:导航、​搜索

介绍

Composer是一款流行的PHP依赖管理工具,主要是为了方便项目依赖的安装和更新。 它将检查特定项目所依赖的其他包,并根据项目要求使用适当的版本为您安装它们。

本教程将解释如何在 Ubuntu 16.04 系统上安装和开始使用 Composer。

先决条件

对于本教程,您将需要:

  • 运行 Ubuntu 16.04 的系统
  • 以具有 sudo 权限 的普通用户身份访问服务器

第 1 步 — 安装依赖项

在我们下载和安装 Composer 之前,我们需要确保我们的服务器已经安装了所有依赖项。

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

sudo apt-get update

现在,让我们安装依赖项。 我们需要 curl 来下载 Composer 和 php-cli 来安装和运行它。 php-mbstring 包是为我们将使用的库提供函数所必需的。 Composer 使用 git 下载项目依赖项,使用 unzip 提取压缩包。 一切都可以使用以下命令安装:

sudo apt-get install curl php-cli php-mbstring git unzip

您现在可以继续下一步。

第 2 步 — 下载并安装 Composer

Composer 提供了一个安装程序,用 PHP 编写。 确保您在您的主目录中,并使用 curl 检索安装程序:

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

接下来,运行一个简短的 PHP 脚本来验证安装程序是否与在 Composer Public Keys / Signatures 页面上找到的最新安装程序的 SHA-384 哈希匹配。 您需要确保将最新的哈希值替换为下面突出显示的值:

php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

输出

Installer verified

要全局安装 composer,请使用以下命令:

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

这将下载并安装 Composer 作为系统范围的命令,名为 composer,位于 /usr/local/bin 下。 输出应如下所示:

OutputAll settings correct for using Composer
Downloading 1.1.1...

Composer successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

要测试您的安装,请运行:

composer

你应该得到类似这样的输出:

Output   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.1.1 2016-05-17 12:25:44

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.
. . .

这意味着 Composer 已成功安装在您的系统上。

如果您希望在此服务器上托管的每个项目都有单独的 Composer 可执行文件,您可以简单地在本地安装它,基于每个项目。 NPM 的用户会熟悉这种方法。 当您的系统用户无权在系统范围内安装软件时,此方法也很有用。


在这种情况下,可以完成安装,如上下载并验证安装脚本后,如下所示:

php composer-setup.php

这会在你的当前目录下生成一个composer.phar文件,可以用./composer.phar command执行。

第三步——生成 composer.json 文件

为了在您的项目中使用 Composer,您需要一个 composer.json 文件。 composer.json 文件基本上告诉 Composer 它需要为您的项目下载哪些依赖项,以及允许安装每个包的哪些版本。 这对于保持项目的一致性和避免安装可能导致向后兼容性问题的不稳定版本非常重要。

您不需要手动创建此文件 - 这样做时很容易遇到语法错误。 当您使用 require 命令向项目添加依赖项时,Composer 会自动生成 composer.json 文件。 也可以用同样的方式添加额外的依赖项,而不需要手动编辑这个文件。

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

  • 确定应用程序需要什么样的库
  • 在 Composer 的官方包存储库 Packagist.org 上研究一个合适的开源库
  • 选择你要依赖的包
  • 运行 composer require 以在 composer.json 文件中包含依赖项并安装包

我们将通过一个简单的演示应用程序来了解这在实践中是如何工作的。

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

让我们从为我们的项目创建一个目录开始。 我们称之为 slugify

cd ~
mkdir slugify
cd slugify

在 Packagist 上搜索包

现在是时候在 Packagist.org 中搜索可以帮助我们生成 slugs 的包了。 如果你在 Packagist 上搜索“slug”这个词,你会得到类似这样的结果:

您将在列表中每个包的右侧看到两个数字。 顶部的数字代表软件包安装了多少次,底部的数字显示了一个软件包在 GitHub 上被加星的次数。 您可以根据这些数字对搜索结果重新排序(查找搜索栏右侧的两个图标)。 一般来说,安装次数多、星数多的软件包往往更稳定,因为有很多人在使用它们。 检查包装说明的相关性也很重要——这真的是您要找的吗?

我们需要的是一个简单的 string-to-slug 转换器。 从搜索结果来看,包 cocur/slugify 似乎是一个很好的匹配,具有合理的安装量和星数。 (这个包比屏幕截图显示的更靠下一点。)

你会注意到 Packagist 上的包有一个 vendor 名称和一个 package 名称。 每个包都有一个唯一标识符(命名空间),其格式与 GitHub 用于其存储库的格式相同:vendor/package。 我们要安装的库使用命名空间 cocur/slugify 命名空间是我们在项目中需要包时需要的。

需要一个包

现在我们确切知道要安装哪个包,我们可以运行 composer require 将其作为依赖项包含在内,并为项目生成 composer.json 文件:

composer require cocur/slugify
OutputUsing version ^2.1 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing cocur/slugify (v2.1.1)
    Downloading: 100%         

Writing lock file
Generating autoload files

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

ls -l
Outputtotal 12
-rw-rw-r-- 1 sammy sammy   59 May 17 10:24 composer.json
-rw-rw-r-- 1 sammy sammy 2894 May 17 10:24 composer.lock
drwxrwxr-x 4 sammy sammy 4096 May 17 10:24 vendor

composer.lock 文件用于存储有关每个包的安装版本的信息,并确保在其他人克隆您的项目并安装其依赖项时使用相同的版本。 vendor 目录是项目依赖所在的位置。 vendor 文件夹应该 而不是 提交到版本控制 - 您只需要包含 composer.jsoncomposer.lock 文件。

安装已经包含 composer.json 文件的项目时,您需要运行 composer install 以下载项目的依赖项。


了解版本约束

如果您检查 composer.json 文件的内容,您会看到如下内容:

cat composer.json
Output{
    "require": {
        "cocur/slugify": "^2.1"
    }
}

您可能会注意到 composer.json 中版本号之前的特殊字符 ^。 Composer 支持多种不同的约束和格式来定义所需的包版本,以便在提供灵活性的同时保持项目的稳定性。 自动生成的 composer.json 文件使用的插入符号 (^) 运算符是推荐的运算符,以实现最大的互操作性,遵循 语义版本控制 。 在这种情况下,它将 2.1 定义为最低兼容版本,并允许更新到 3.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 版本限制,请阅读官方文档

第 4 步 — 包括自动加载脚本

由于 PHP 本身不会自动处理类的加载,因此 Composer 还提供了一个自动加载脚本,您可以将其包含在项目中以免费获得自动加载。 这使得使用依赖项和定义自己的命名空间变得更加容易。

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

让我们回到 slugify 示例应用程序。 我们将使用 nano 创建一个 test.php 脚本,其中我们将使用 cocur/slugify 库:

nano test.php

测试.php

<?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

第五步——更新项目依赖

每当你想更新你的项目依赖时,你只需要运行 update 命令:

composer update

这将检查您项目中所需的库的较新版本。 如果找到较新的版本并且它与 composer.json 文件中定义的版本约束兼容,它将替换以前安装的版本。 composer.lock 文件将更新以反映这些更改。

您还可以通过运行以下命令更新一个或多个特定库:

composer update vendor/package vendor2/package2

结论

本教程涵盖了在 Ubuntu 16.04 上开始使用 Composer 的基本知识。 Composer 是每个 PHP 开发人员都应该拥有的强大工具。

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