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

介绍

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

本教程将介绍如何在Debian 8服务器上安装和开始使用Composer。

准备

在本教程中,您将需要:

  • 一个Debian 8服务器,并设置了一个可以使用sudo命令的非root账户,

第1步 - 安装依赖项

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

首先,更新本软件包。

$ sudo apt-get update

现在,让我们安装依赖项。我们需要curl下载Composer和php5-cliPHP软件包来安装和运行它。Composer使用git版本控制系统来下载项目依赖项。您可以使用以下命令一次安装这三个包:

$ sudo apt-get install curl php5-cli git

现在已经安装了必要的依赖项,让我们继续并安装Composer。

第2步 - 下载和安装Composer

我们将按照Composer官方文档中的说明进行一些小修改,以便将Composer安在到 /usr/local/bin。这将允许服务器上的每个用户使用Composer。

将安装程序下载到/tmp目录。

$ php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"

访问Composer的pubkeys和签名页面,并在顶部复制SHA-384字符串。然后,通过替换sha_384_string您复制的字符串运行以下命令。

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

此命令使用Composer网站上的正确哈希检查您下载的文件的哈希值。如果匹配,则会打印安装程序验证。如果它不匹配,它将打印安装程序损坏,在这种情况下,您应该仔细检查您是否正确复制了SHA-384字符串。

接下来,我们将安装Composer。要在全局下安装它,我们将使用--install-dir标志; --filename告诉安装程序Composer的可执行文件的名称。以下是在一个命令中执行此操作的方法:

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

您将看到如下消息:

All settings correct for using Composer
Downloading...

Composer (version 1.3.2) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

您可以通过检查其版本来验证Composer是否已正确安装。

$ composer --version

您应该看到已安装的版本。在撰写本文时,版本是:

Composer version 1.3.2 2017-01-27 18:23:41

最后,您可以安全地删除安装程序脚本,因为您不再需要它。

$ rm /tmp/composer-setup.php

Composer现在已经设置并运行,等待您的项目使用。在下一节中,您将生成该composer.json文件,其中包含项目所依赖的PHP库。

第3步 - 生成composer.json文件

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

您无需手动创建此文件; 如果你这样做,很容易遇到语法错误。使用require命令向项目添加依赖项时,Composer会自动生成composer.json文件。还可以以相同的方式添加其他依赖项,而无需手动编辑此文件。

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

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

我们将通过一个简单的演示应用程序,看它是如何工作的。

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

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

$ cd ~
$ mkdir slugify
$ cd slugify

接下来,让我们搜索我们需要使用的库。

在Packagist上搜索包

接下来,我们将搜索Packagist以获取包以帮助生成slug。如果您搜索“slug”,您将看到一个包列表。在列表中每个包的右侧,您将看到两个数字:顶部的数字是安装包的次数,底部的数字显示包在GitHub上加星的次数。

一般来说,具有更多的安装量和星星的包装往往更稳定,因为许多人正在使用它们。检查包装说明以确保包装确实是您正在寻找的包装也很重要。

我们需要的是一个简单的string-to-slug转换器。作为一个例子,我们将使用包cocur/slugify。这似乎是一个很好的匹配,因为它有合理数量的安装量和星星。

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

现在我们确定了我们想要的库,让我们将它添加到composer.json文件中。

需要一个包

我们可以运行composer require以将库包含为依赖项,并为项目生成composer.json文件:

$ composer require cocur/slugify
Using version ^2.3 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 (v2.3) Downloading: 100%         
Writing lock file
Generating autoload files

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

$ ls -l
total 12
-rw-r--r-- 1 sammy sammy   59 Feb  1 13:43 composer.json
-rw-r--r-- 1 sammy sammy 2896 Feb  1 13:43 composer.lock
drwxr-xr-x 4 sammy sammy 4096 Feb  1 13:43 vendor

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

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

您可能会注意到composer.lock文件包含有关我们项目所依赖的PHP库版本的特定信息。Composer使用特殊语法将库限制为特定版本。让我们看看它是如何工作的。

了解版本约束

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

$ cat composer.json
{
    "require": {
        "cocur/slugify": "^2.3"
    }
}

在版本号之前有一个插入符号^。 Composer支持几种不同的约束和格式来定义所需的包版本,以便在保持项目稳定的同时提供灵活性。 自动生成的composer.json文件使用的插入符操作符是推荐的操作符,用于在语义版本控制之后实现最大的互操作性。 在这种情况下,它将1.3定义为最低兼容版本,并允许更新任何低于2.0的未来版本。 您可以在Composer的版本控制文档中阅读有关版本基本原理的更多信息。

到目前为止,我们已经了解了如何使用Composer使用Composer添加和限制项目所需的PHP库composer.json。下一步是在我们的应用程序中实际使用这些库。为此,Composer提供了autoload.php便于加载外部库的过程的文件。

第4步 - 自动加载脚本

Composer提供了一个自动加载脚本,您可以将其包含在项目中自动加载。这使得使用依赖项和定义自己的命名空间变得更加容易。您需要做的唯一事情是在任何类实例化之前将vendor/autoload.php文件包含在PHP脚本中。

让我们回到slugify示例应用程序。使用nano或您喜欢的文本编辑器,创建一个test.php,我们使用cocur/slugify库的脚本。

$ nano test.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

您已完全设置了Composer,但请继续阅读以了解如何维护安装。

第5步 - 更新Composer和项目依赖项(可选)

要更新Composer本身,您可以使用它提供的内置self-update命令。由于Composer是全局安装的,因此您需要以root权限运行该命令。

$ sudo -H composer self-update

您可以使用composer update命令,专门列出一个或多个特定库来更新它们。

$ composer update namespace/package

如果要更新所有项目依赖项,请运行update命令。

$ composer update

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

结论

Composer是每个PHP开发人员在其实用程序带中应具有的强大工具。除了提供一种简单可靠的方法来管理项目依赖关系之外,它还建立了一个新的事实标准,用于共享和发现社区创建的PHP包。

在本教程中,我们简要介绍了Composer的基础知识:如何安装它,如何创建项目以及如何查找它以及如何维护它。如果您使用CentOS系统,可以参考腾讯云CentOS配置Composer,学习如何基于Composer的PHP模块开发等教程,要了解更多信息,您可以浏览腾讯云社区访问更多关于Composer的内容。


参考文献:《How To Install and Use Composer on Debian 8》

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阮一峰的网络日志

Linux 守护进程的启动方法

"守护进程"(daemon)就是一直在后台运行的进程(daemon)。 本文介绍如何将一个 Web 应用,启动为守护进程。 ? 一、问题的由来 Web应用写好后...

34850
来自专栏编程

Sublime Text的安装与配置

1.下载Sublime Text安装包,双击安装程序进行安装; 2.安装Package Control,Ctrl+~打开控制台,选择相应版本的代码粘贴(如图所示...

27480
来自专栏草根专栏

使用VS Code开发asp.net core (下)

本文是基于Windows10的. Debugging javascript 打开wwwroot/js/site.js, 写一段简单的js代码: (functio...

36650
来自专栏乐沙弥的世界

CentOS 7下 yum方式安装Nginx

Nginx 是一个很强大的高性能Web和反向代理服务器,它具有众多非常优越的特性。诸如低开销,高并发,支持缓存,支持正反向代理,支持负载均衡,支持正则,支持re...

17620
来自专栏cloudskyme

三步学会用spring开发OSGI——(第三步:web篇)

接下来就是我们要创建的web工程了,为了简单,我们直接利用virgo所带的模板来新建工程,控制层使用的是spring mvc 3。 创建web工程 打开STS,...

37690
来自专栏自由而无用的灵魂的碎碎念

Virtualbox下fedora访问windows下的共享文件夹方法

今天想尝试tr命令删除windows文件下的"^M"符号,考虑挂载windwos下的文件夹到虚拟系统下,

16350
来自专栏高性能分布式系统设计

MySQL大结果集分次取回,不耗费大内存的lazy计算的方法

Python导数据的时候,需要在一个大表上读取很大的结果集。 如果用传统的方法,Python的内存会爆掉。因为无论是fetchone()还是fetchal...

27180
来自专栏网络

CobaltStrike团体服务器部署并后台运行

大家好,我是你们的老朋友Alex。Cobaltstrike的部署安装很简单,但是在实际使用中出现了问题。我把团队服务器放在ECS上,出现了两个问题:1.客户端无...

42060
来自专栏木制robot技术杂谈

Ubuntu 搭建 Seafile

本文档用来说明通过预编译好的安装包来安装并运行基于 MySQL/MariaDB 的 Seafile 服务器。(MariaDB 是 MySQL 的分支)

66730
来自专栏Java学习网

Linux 守护进程的启动方法

Linux 守护进程的启动方法 “守护进程”(daemon)就是一直在后台运行的进程(daemon)。 本文介绍如何将一个 Web 应用,启动为守护进程。 ? ...

44580

扫码关注云+社区

领取腾讯云代金券