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

介绍

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

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

准备

要完成本教程,您需要:

  • 一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

第1步 - 安装依赖项

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

首先,运行以下命令更新包管理器缓存:

sudo apt update

现在,让我们安装依赖项。我们需要curl下载Composer以及php-cli安装和运行它。该php-mbstring软件包是为我们将要使用的库提供功能所必需的。gitComposer使用它来下载项目依赖项,以及unzip提取压缩包。可以使用以下命令安装所有内容:

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

安装了先决条件后,我们可以自行安装Composer。

第2步 - 下载和安装Composer

Composer提供了一个用PHP编写的安装程序。我们将下载它,验证它是否已损坏,然后使用它来安装Composer。

确保您在主目录中,然后使用curl以下命令检索安装程序:

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

接下来,验证安装程序是否与Composer Public Keys / Signatures页面上找到的最新安装程序的SHA-384hash匹配。从该页面复制哈希并将其存储为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,那么你需要再次重新下载安装脚本并仔细检查你是否使用了正确的hash。然后运行该命令以再次验证安装程序。获得经过验证的安装程序后,即可继续。

要全局安装composer,请使用以下命令,该命令将下载并安装Composer作为名为composer的系统范围的命令,位于/usr/local/bin

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

您将看到以下输出:

All settings correct for using Composer
Downloading...
​
Composer (version 1.6.5) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

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

composer

你会看到这个输出显示了Composer的版本和参数。

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.6.5 2018-05-04 11:44:59
​
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.
  -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您需要为项目下载哪些依赖项,以及允许安装每个软件包的哪些版本。这对于保持项目的一致性并避免安装可能导致向后兼容性问题的不稳定版本非常重要。

您无需手动创建此文件 - 执行此操作时很容易遇到语法错误。composer.json使用该require命令向项目添加依赖项时,Composer会自动生成文件。您可以以相同的方式添加其他依赖项,而无需手动编辑此文件。

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

  • 确定应用程序需要哪种库。
  • Packagist.org上研究一个合适的开源库,Packagist.org是Composer的官方软件包库。
  • 选择您要依赖的包。
  • 运行composer require以在composer.json文件中包含依赖项并安装程序包。

让我们用演示应用程序试试吧。

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

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

cd ~
mkdir slugify
cd slugify

现在是时候搜索Packagist.org了解一个可以帮助我们生成slug的软件包。如果您在Packagist上搜索“slug”一词,您将得到与此类似的结果:

您将在列表中的每个包的右侧看到两个数字。顶部的数字表示软件包的安装次数,底部的数字表示软件包在GitHub上加星标的次数。您可以根据这些数字对搜索结果重新排序(查找搜索栏右侧的两个图标)。一般来说,装有更多装置和更多星星的包装往往更稳定,因为很多人都在使用它们。检查包装描述的相关性也很重要,以确保它是您所需要的。

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

Packagist上的软件包具有供应商名称和软件包名称。每个包都有一个唯一的标识符(命名空间),格式为GitHub用于其存储库的vendor/package格式。我们要安装的库使用的是cocur/slugif命名空间。您需要命名空间才能要求项目中的包。

既然您确切知道要安装哪个软件包,请运行composer require以将其作为依赖项包含,并为项目生成composer.json文件:

composer require cocur/slugify

当Composer下载依赖项时,您将看到此输出:

Using version ^3.1 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing cocur/slugify (v3.1): Downloading (100%)
Writing lock file
Generating autoload files

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

ls -l
total 12
-rw-rw-r-- 1 sammy sammy   59 Jul 11 16:40 composer.json
-rw-rw-r-- 1 sammy sammy 2934 Jul 11 16:40 composer.lock
drwxrwxr-x 4 sammy sammy 4096 Jul 11 16:40 vendor

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

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

我们来看看版本限制。如果您检查composer.json文件的内容,您会看到如下内容:

cat composer.json
{
    "require": {
        "cocur/slugify": "^3.1"
    }
}
sam

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

接下来,让我们看看如何使用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.jsoncomposer.lock文件,让其他人可以安装这些更新的版本。

结论

Composer是每个PHP开发人员在其实用程序带中应具有的强大工具。在本教程中,您安装了Composer并在一个简单的项目中使用它。您现在知道如何安装和更新依赖项。

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

更多Ubuntu教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Install and Use Composer on Ubuntu 18.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏恰童鞋骚年

.NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控

  App.Metrics是一款开源的支持.NET Core的监控插件,它还可以支持跑在.NET Framework上的应用程序(版本 >= 4.5.2)。官方...

23210
来自专栏互联网技术栈

Redis 队列

举例: 队列主要用在系统解耦、流量削峰、异步处理、数据顺序处理等场景。新手在使用时可能会犯一些常见的错误。下面讲一个新手容易犯的错误,在这个示例中把队列的入...

55650
来自专栏沈唁志

创建属于自己的第一个Composer/Packagist包

Composer 是 PHP 的一个依赖管理工具,Composer 不是一个包管理器,它涉及 “packages” 和 “libraries”,但它在每个项目的...

15140
来自专栏技术博文

H5缓存机制浅析

1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性。离线存储(也可称为缓存机制)是其中一个非常重要的特性。H5 引入的离...

44680
来自专栏木子墨的前端日常

关于options请求的一点理解

最近最项目改造,对所有的ajax请求统一做了一点处理,发现原来很正经的ajax请求突然不正常了,每个ajax之前都多了一个相应的method为options的请...

49720
来自专栏python学习指南

python爬虫(六)_urllib2:handle处理器和自定义opener

本文将介绍handler处理器和自定义opener,更多内容请参考:python学习指南 opener和handleer 我们之前一直使用的是urllib...

29480
来自专栏漫漫全栈路

Nginx配置文件nginx.conf详解

最近折腾Ubuntu比较多,也基本原理了Windows和IIS了,论一个软狗的堕落史。既然换到Ubuntu系统上来,勉强算个web开发人员的我当然用的最多的就...

74970
来自专栏小怪聊职场

爬虫架构|Celery+RabbitMQ快速入门(四)整合版本

71960
来自专栏calvin

centos7使用lldb调试netcore应用转储dump文件

脚本大概思路就是下载如下所表示的组件所有源码,除llvm外的其他组件源代码解压到llvm/tools目录下,这样子源代码就全部准备好 BUILD_TARGET...

19020
来自专栏散尽浮华

进程管理利器-supervisor部署记录

一、简单介绍 supervisor是用来管理进程的一个工具,止于为什么要用supervisor,是因为相对于linux传统的进程管理方式来说,它有很多的优势: ...

41580

扫码关注云+社区

领取腾讯云代金券