在Ubuntu 18.04上安装和使用Composer的方法

简介: 在Ubuntu 18.04上安装和使用Composer的方法

介绍

Composer 是一个流行的 PHP 依赖管理工具,主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包,并根据项目要求安装适当的版本。

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

先决条件

要完成本教程,您需要:

  • 一个按照 Ubuntu 18.04 初始服务器设置指南设置的 Ubuntu 18.04 服务器,包括一个 sudo 非 root 用户和一个防火墙。

步骤 1 — 安装依赖项

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

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

sudo apt update

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

sudo apt install curl php-cli php-mbstring php-curl 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-384 哈希匹配。从该页面复制哈希并将其存储为 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,那么您需要重新下载安装脚本,并再次检查您是否使用了正确的哈希。然后再次运行命令验证安装程序。一旦您有了经过验证的安装程序,就可以继续。

要全局安装 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 2.1.9) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

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

composer

您将看到以下输出,显示 Composer 的版本和参数。

______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.1.9 2021-10-05 09:47:38
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.
      --no-cache                 Prevent use of the cache
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .

这验证了 Composer 在您的系统上成功安装,并且可以在系统范围内使用。

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

步骤 3 —— 在 PHP 项目中使用 Composer

PHP 项目通常依赖于外部库,管理这些依赖及其版本可能会很棘手。Composer 通过跟踪您的依赖关系并使其他人能够轻松安装它们来解决这个问题。

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

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

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

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

让我们通过一个演示应用程序来尝试一下。

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

让我们从为我们的项目创建一个目录开始。我们将其命名为 slugify

cd ~
mkdir slugify
cd slugify

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

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

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

我们需要一个简单的字符串转换为 slug 的转换器。从搜索结果中,软件包 cocur/slugify 似乎是一个很好的选择,安装次数和星星数都还可以接受。 (软件包在截图显示的页面下方一点点。)

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

现在您知道要安装的确切软件包是哪个了,运行 composer require 将其包含为依赖项,并为项目生成 composer.json 文件:

composer require cocur/slugify

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

Using version ^4.0 for cocur/slugify
./composer.json has been created
Running composer update cocur/slugify
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking cocur/slugify (v4.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Downloading cocur/slugify (v4.0.0)
  - Installing cocur/slugify (v4.0.0): Extracting archive
Generating autoload files

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

ls -l
total 12
-rw-rw-r-- 1 sammy sammy   59 Oct 26 19:04 composer.json
-rw-rw-r-- 1 sammy sammy 3411 Oct 26 19:04 composer.lock
drwxrwxr-x 4 sammy sammy 4096 Oct 26 19:04 vendor

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

让我们快速看一下版本约束。如果检查您的 composer.json 文件的内容,您将看到类似于以下内容:

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

您可能会注意到 composer.json 中版本号前面的特殊字符 ^。Composer 支持几种不同的约束和格式来定义所需的软件包版本,以提供灵活性同时保持项目的稳定性。由自动生成的 composer.json 文件使用的插入符(^)运算符是最大互操作性的推荐运算符,遵循语义化版本。在这种情况下,它将 4.0 定义为最低兼容版本,并允许更新到 5.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 提供了一个自动加载脚本,你可以在项目中包含它,从而免费获得自动加载功能。这样可以更轻松地处理项目的依赖关系。

你需要做的唯一一件事就是在 PHP 脚本中在任何类实例化之前包含 vendor/autoload.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 包的共享和发现建立了一个新的事实标准。


目录
相关文章
|
1月前
|
并行计算 Ubuntu Linux
Ubuntu学习笔记(五):18.04安装多版本CUDA
这篇博客文章介绍了在Ubuntu 18.04系统上如何安装和切换不同版本的CUDA,以及如何安装不同版本的cuDNN。
217 2
|
1月前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
3709 3
|
13天前
|
Ubuntu 开发工具 git
Ubuntu安装homebrew的完整教程
本文介绍了如何在没有公网的情况下安装 Homebrew。首先访问 Homebrew 官网,然后通过阿里云的镜像克隆安装脚本,并创建普通用户进行安装。接着修改 `install.sh` 文件指向国内镜像,执行安装命令。最后配置环境变量并更换 Homebrew 源为国内镜像,确保安装顺利。
125 50
|
1月前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
134 4
Linux系统之Ubuntu安装cockpit管理工具
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
150 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
1月前
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
103 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
|
1月前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
151 1
|
1月前
|
Ubuntu Linux
软件安装(五):Ubuntu 18.04安装Teamviewer 看一遍就会
这篇文章介绍了在Ubuntu 18.04系统上通过图形界面和命令行两种方法安装TeamViewer远程控制软件的步骤。
34 2
|
22天前
|
消息中间件 Ubuntu Java
Ubuntu系统上安装Apache Kafka
Ubuntu系统上安装Apache Kafka
|
28天前
|
Ubuntu Linux
Ubuntu 16.04下无法安装.deb的解决方法
希望以上策略能有效协助您克服在Ubuntu 16.04中安装.deb文件时遇到的挑战。
28 0